home *** CD-ROM | disk | FTP | other *** search
/ Altsys Virtuoso 2.0K / virtuoso_20k.iso / DemoApps / Graphics / Viewers / raytracers / ohta / Source / random.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-08  |  898 b   |  47 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double rnd()
  5. {    return (random()&0xffff)/65536.0;
  6. }
  7.  
  8. main(ac,av)
  9. int ac;
  10. char **av;
  11. {int i,j,n;
  12. double x,y,z,r,cr,d,l; float rr, r1, r2, g1, g2, b1, b2;
  13.     if(ac!=3&&ac!=4)
  14.     {    fprintf(stderr,"Usage: %s number radious [seed]\n",
  15.             av[0]);
  16.         exit(1);
  17.     }
  18.     n=atoi(av[1]);
  19.     sscanf(av[2]," %f \0",&rr); r = rr; /* */
  20.     /*r=atof(av[2]); /* */
  21.     if(ac==4)
  22.         srandom(atoi(av[3]));
  23.     if(n<0||r<=0)
  24.     {    fprintf(stderr,"Usage: %s number radious [seed]\n",
  25.             av[0]);
  26.         exit(1);
  27.     }
  28.     for(i=0;i<n;i++)
  29.     {    while(1)
  30.         {    x=rnd()*2-1;
  31.             y=rnd()*2-1;
  32.             z=rnd()*2-1;
  33.             l=x*x+y*y+z*z;
  34.             if(l<=(1-r)*(1-r))
  35.                 break;;
  36.         }
  37.         r1=rnd() * 0.01; r2=rnd()*0.8+0.1;
  38.         g1=rnd() * 0.01; g2=rnd()*0.8+0.1;
  39.         b1=rnd() * 0.01; b2=rnd()*0.8+0.1;
  40.         printf("o 0 1\n");
  41.         printf("\t%g %g %g %g\n",x,y,z+2,r);
  42.         printf("\t%g %g %g\t%g %g %g\t0.7 0.7 0.7 0.01\n",
  43.             r1,g1,b1,r2,g2,b2);
  44.     }
  45.     exit(0);
  46. }
  47.