ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/genmarble.c
Revision: 2.5
Committed: Sat Feb 22 02:07:23 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.4: +3 -8 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 2.5 static const char RCSid[] = "$Id$";
3 greg 1.1 #endif
4     /*
5     * genmarble.c - generate a marble with bubbles inside.
6     *
7     * 1/8/86
8     */
9    
10     #include <stdio.h>
11    
12 greg 2.5 #include <stdlib.h>
13    
14 greg 2.3 #include <math.h>
15    
16 greg 1.1 #include "random.h"
17    
18     #define PI 3.14159265359
19    
20     typedef double FVECT[3];
21    
22     double bubble(); /* pretty cute, huh? */
23 greg 2.4
24 greg 1.1
25     main(argc, argv)
26     int argc;
27     char **argv;
28     {
29     char *cmtype, *cname;
30     FVECT cent;
31     double rad;
32     int nbubbles, i;
33     double bubrad;
34     FVECT v;
35     double brad;
36    
37     if (argc != 9) {
38     fprintf(stderr,
39     "Usage: %s material name cent rad #bubbles bubrad\n",
40     argv[0]);
41     exit(1);
42     }
43     cmtype = argv[1];
44     cname = argv[2];
45     cent[0] = atof(argv[3]);
46     cent[1] = atof(argv[4]);
47     cent[2] = atof(argv[5]);
48     rad = atof(argv[6]);
49     nbubbles = atoi(argv[7]);
50     bubrad = atof(argv[8]);
51    
52     if (bubrad >= rad) {
53     fprintf(stderr, "%s: bubbles too big for marble\n", argv[0]);
54     exit(1);
55     }
56    
57     printf("\n%s sphere %s\n", cmtype, cname);
58     printf("0\n0\n4 %f %f %f %f\n", cent[0], cent[1], cent[2], rad);
59    
60     for (i = 0; i < nbubbles; i++) {
61     brad = bubble(v, cent, rad, bubrad);
62     printf("\n%s bubble %s.%d\n", cmtype, cname, i);
63     printf("0\n0\n4 %f %f %f %f\n", v[0], v[1], v[2], brad);
64     }
65    
66     return(0);
67     }
68    
69    
70     double
71     bubble(v, cent, rad, bubrad) /* compute location of random bubble */
72     FVECT v, cent;
73     double rad, bubrad;
74     {
75     double r, ro, theta, phi;
76    
77     r = frandom()*bubrad;
78     ro = sqrt(frandom())*(rad-r);
79     theta = frandom()*(2.0*PI);
80     phi = frandom()*PI;
81     sphere_cart(v, ro, theta, phi);
82     v[0] += cent[0]; v[1] += cent[1]; v[2] += cent[2];
83     return(r);
84     }
85    
86    
87     sphere_cart(v, ro, theta, phi) /* spherical to cartesian coord. conversion */
88     FVECT v;
89     double ro, theta, phi;
90     {
91     double d;
92    
93     d = sin(phi);
94     v[0] = ro*d*cos(theta);
95     v[1] = ro*d*sin(theta);
96     v[2] = ro*cos(phi);
97     }