76 |
|
double mult; |
77 |
|
int i; |
78 |
|
|
79 |
< |
src->ss[SV][0] = src->ss[SV][1] = src->ss[SV][2] = 0.0; |
79 |
> |
getperpendicular(src->ss[SU], src->snorm, rand_samp); |
80 |
> |
mult = .5 * sqrt( src->ss2 ); |
81 |
|
for (i = 0; i < 3; i++) |
81 |
– |
if (src->snorm[i] < 0.6 && src->snorm[i] > -0.6) |
82 |
– |
break; |
83 |
– |
src->ss[SV][i] = 1.0; |
84 |
– |
fcross(src->ss[SU], src->ss[SV], src->snorm); |
85 |
– |
mult = .5 * sqrt( src->ss2 / DOT(src->ss[SU],src->ss[SU]) ); |
86 |
– |
for (i = 0; i < 3; i++) |
82 |
|
src->ss[SU][i] *= mult; |
83 |
|
fcross(src->ss[SV], src->snorm, src->ss[SU]); |
84 |
|
} |
98 |
|
src->so = so; |
99 |
|
/* get the face */ |
100 |
|
f = getface(so); |
101 |
< |
if (f->area == 0.0) |
101 |
> |
if (f->area == 0.) |
102 |
|
objerror(so, USER, "zero source area"); |
103 |
|
/* find the center */ |
104 |
|
for (j = 0; j < 3; j++) { |
196 |
|
src->so = so; |
197 |
|
/* get the ring */ |
198 |
|
co = getcone(so, 0); |
199 |
+ |
if (co == NULL) |
200 |
+ |
objerror(so, USER, "illegal source"); |
201 |
|
if (CO_R1(co) <= FTINY) |
202 |
|
objerror(so, USER, "illegal source radius"); |
203 |
|
VCOPY(src->sloc, CO_P0(co)); |
224 |
|
src->so = so; |
225 |
|
/* get the cylinder */ |
226 |
|
co = getcone(so, 0); |
227 |
+ |
if (co == NULL) |
228 |
+ |
objerror(so, USER, "illegal source"); |
229 |
|
if (CO_R0(co) <= FTINY) |
230 |
|
objerror(so, USER, "illegal source radius"); |
231 |
|
if (CO_R0(co) > .2*co->al) /* heuristic constraint */ |
238 |
|
/* set sampling vectors */ |
239 |
|
for (i = 0; i < 3; i++) |
240 |
|
src->ss[SU][i] = .5 * co->al * co->ad[i]; |
241 |
< |
src->ss[SV][0] = src->ss[SV][1] = src->ss[SV][2] = 0.0; |
241 |
> |
getperpendicular(src->ss[SW], co->ad, rand_samp); |
242 |
|
for (i = 0; i < 3; i++) |
244 |
– |
if (co->ad[i] < 0.6 && co->ad[i] > -0.6) |
245 |
– |
break; |
246 |
– |
src->ss[SV][i] = 1.0; |
247 |
– |
fcross(src->ss[SW], src->ss[SV], co->ad); |
248 |
– |
normalize(src->ss[SW]); |
249 |
– |
for (i = 0; i < 3; i++) |
243 |
|
src->ss[SW][i] *= .8559 * CO_R0(co); |
244 |
|
fcross(src->ss[SV], src->ss[SW], co->ad); |
245 |
|
} |
340 |
|
CONE *co; |
341 |
|
|
342 |
|
co = getcone(op, 0); |
343 |
+ |
if (co == NULL) |
344 |
+ |
return(0.); |
345 |
|
VCOPY(ocent, CO_P0(co)); |
346 |
|
return(CO_R1(co)*CO_R1(co)); |
347 |
|
} |
370 |
|
CONE *co; |
371 |
|
|
372 |
|
co = getcone(op, 0); |
373 |
+ |
if (co == NULL) { |
374 |
+ |
memset(nvec, 0, sizeof(FVECT)); |
375 |
+ |
return(0.); |
376 |
+ |
} |
377 |
|
VCOPY(nvec, co->ad); |
378 |
|
return(DOT(nvec, CO_P0(co))); |
379 |
|
} |