#include "stdio.h" #include "stdlib.h" #include "math.h" #include #include #include "paulslib.h" #include "bitmaplib.h" #define NX 1000 #define NY 1000 #define N 1000000 #define SCALE (NX / 5.0) #define PHI ((1.0 + sqrt(5.0)) / 2.0) int main(int argc,char **argv) { int n; XY u,p0 = {0.0,0.0},p1 = {0.0,0.0},p2 = {0.0,0.0},p = {0.0,0.0}; double r,r0,ru; BITMAP *image,white={65535,65535,65535},black={0,0,0},bitmap; COLOUR colour; FILE *fptr; /* Create the image */ image = CreateBitmap(NX,NY); EraseBitmap(image,NX,NY,white); srand(time(NULL)); for (n=0;n 0 ? -sqrt(5.0) : sqrt(5.0)); p2 = p1; switch (rand() % 5) { case 0: p1.x = p.x / r - PHI; p1.y = p.y / r; break; case 1: p1.x = - p.x / r - PHI; p1.y = - p.y / r; break; case 2: p1.x = - p.x / r - PHI + 1; p1.y = - p.y / r; break; case 3: p1.x = p.y / r; p1.y = p.x / r + 1; break; case 4: p1.x = - p.y / r; p1.y = - p.x / r - 1; break; } p0 = p; p = p1; r = sqrt(p.x*p.x + p.y*p.y); r0 = sqrt(p0.x*p0.x + p0.y*p0.y); u.x = (p.x - 2 * p0.x + p2.x) / pow(r - r0,2.0); u.y = (p.y - 2 * p0.y + p2.y) / pow(r - r0,2.0); ru = sqrt(pow(u.x - p.x,2.0) + pow(u.y - p.y,2.0)); if (n < 100) continue; colour = GetColour(r*ru,0,10.0,2); bitmap.r = colour.r * 255; bitmap.g = colour.g * 255; bitmap.b = colour.b * 255; DrawPixel(image,NX,NY, (int)(p.x * SCALE + NX / 2 + NX / 7), (int)(p.y * SCALE + NY / 2),bitmap); if (n % (N/100) == 0) fprintf(stderr,"."); } fprintf(stderr,"\n"); /* Write the image to a ppm file */ if ((fptr = fopen("roger2.ppm","w")) == NULL) { fprintf(stderr,"Unable to open bitmap file\n"); exit(0); } WriteBitmap(fptr,image,NX,NY,2); fclose(fptr); DestroyBitmap(image); } #include "bitmaplib.c" #include "paulslib.c"