/******************************************************************* grass.c -- Eric Weeks v01: 8-23-96: started from shell.c; -hxy options *******************************************************************/ #include #include #include #include #define PI 3.14159265358979323846264338328 #define EE 2.71828182845904523536 #define MAX 2000 #define COLMAX 256 #define COIN ((drand48()<.5) ? 0 : 1) /* COIN is equal to zero or one, randomly !! */ void rand_init(); main(argc,argv) int argc; char **argv; { int c,numpts; double x,y; FILE *fp; extern int optind; extern char *optarg; int xres,yres; int height[MAX],color[MAX]; float red[COLMAX],gre[COLMAX],blu[COLMAX]; int t,r; int maxcols,flag,newcol; float chance; int sideflag; int flowers,flowflag,count; rand_init(); maxcols = 10; xres = 200; yres = 200; chance = 1.0; flowflag = 0; flowers = 9999999; while ((c = getopt(argc, argv, "hx:y:e:f:")) != EOF) switch (c) { case 'h': fprintf(stderr,"Usage: %s [options]\n\n",argv[0]); fprintf(stderr," -h : this help message\n"); fprintf(stderr," -x : x-resolution [%d]\n",xres); fprintf(stderr," -y : y-resolution [%d]\n",yres); fprintf(stderr," -e # : chance to stick sideways [%.2f]\n",chance); fprintf(stderr," -f # : flowers algorithm starting at [%d]\n",flowers); exit(1); break; case 'x': xres = atoi(optarg); break; case 'y': yres = atoi(optarg); break; case 'e': chance = atof(optarg); break; case 'f': flowers = atoi(optarg); flowflag = 1; break; } t = 0; red[t] = 0.0; gre[t] = 0.0; blu[t] = 0.0; t++; /* black */ red[t] = 0.0; gre[t] = 0.7; blu[t] = 0.7; t++; /* dk blue #1 */ red[t] = 0.0; gre[t] = 1.0; blu[t] = 1.0; t++; /* blue */ red[t] = 0.3; gre[t] = 0.7; blu[t] = 0.7; t++; /* gray/blue */ red[t] = 0.3; gre[t] = 0.3; blu[t] = 0.7; t++; /* dk purple1 */ red[t] = 0.5; gre[t] = 0.5; blu[t] = 1.0; t++; /* dk purple2 */ red[t] = 0.0; gre[t] = 0.0; blu[t] = 1.0; t++; /* dk blue #2 */ red[t] = 0.5; gre[t] = 0.0; blu[t] = 1.0; t++; /* dk purple3 */ red[t] = 1.0; gre[t] = 0.0; blu[t] = 0.5; t++; /* red */ red[t] = 0.7; gre[t] = 0.0; blu[t] = 0.7; t++; /* dk red */ maxcols = t; for (t=0;tr) { r = height[t-1]; newcol = color[t-1]; sideflag = 1; } if (height[t+1]>r) { r = height[t+1]; newcol = color[t+1]; sideflag = 1; } if (drand48()>(1.0-chance)) sideflag = 0; } height[t] = r+1; color[t] = newcol; printf("%d %d ",t,r); if (flowflag==0 || count>flowers) { printf("%.2f %.2f %.2f\n",red[newcol],gre[newcol],blu[newcol]); } else { printf("%.2f %.2f %.2f\n",0.0,1.0,0.0); } if (r+1>=yres) flag = 0; /* end program */ count++; if (count>flowers) chance = 0.9; } } /*-------------------------------------------------------------*/ /* initialize random number generator */ void rand_init() { int seed; time_t timenow; time(&timenow); seed=timenow % 100000; srand48(seed); }