86 |
|
rayvalue(&ar); |
87 |
|
ndims--; |
88 |
|
addcolor(dp->v, ar.rcol); |
89 |
< |
if (ar.rt < FHUGE) |
89 |
> |
if (ar.rt > FTINY && ar.rt < FHUGE) |
90 |
|
dp->r += 1.0/ar.rt; |
91 |
|
/* (re)initialize error */ |
92 |
|
if (dp->n++) { |
179 |
|
} |
180 |
|
addcolor(acol, dp->v); |
181 |
|
} |
182 |
< |
if (pg != NULL) |
183 |
< |
posgradient(pg, div, &hemi); |
184 |
< |
if (dg != NULL) |
185 |
< |
dirgradient(dg, div, &hemi); |
182 |
> |
b = bright(acol); |
183 |
> |
if (b > FTINY) { |
184 |
> |
b = ndivs/b; |
185 |
> |
if (pg != NULL) { |
186 |
> |
posgradient(pg, div, &hemi); |
187 |
> |
for (i = 0; i < 3; i++) |
188 |
> |
pg[i] *= b; |
189 |
> |
} |
190 |
> |
if (dg != NULL) { |
191 |
> |
dirgradient(dg, div, &hemi); |
192 |
> |
for (i = 0; i < 3; i++) |
193 |
> |
dg[i] *= b; |
194 |
> |
} |
195 |
> |
} else { |
196 |
> |
if (pg != NULL) |
197 |
> |
for (i = 0; i < 3; i++) |
198 |
> |
pg[i] = 0.0; |
199 |
> |
if (dg != NULL) |
200 |
> |
for (i = 0; i < 3; i++) |
201 |
> |
dg[i] = 0.0; |
202 |
> |
} |
203 |
|
free((char *)div); |
204 |
|
} |
205 |
|
b = 1.0/ndivs; |
213 |
|
else if (arad < minarad) |
214 |
|
arad = minarad; |
215 |
|
arad /= sqrt(r->rweight); |
216 |
+ |
if (pg != NULL) { /* clip pos. gradient if too large */ |
217 |
+ |
d = 4.0*DOT(pg,pg)*arad*arad; |
218 |
+ |
if (d > 1.0) { |
219 |
+ |
d = 1.0/sqrt(d); |
220 |
+ |
for (i = 0; i < 3; i++) |
221 |
+ |
pg[i] *= d; |
222 |
+ |
} |
223 |
+ |
} |
224 |
|
return(arad); |
225 |
|
oopsy: |
226 |
|
if (div != NULL) |
263 |
|
dp = da; |
264 |
|
for (i = 0; i < hp->nt; i++) |
265 |
|
for (j = 0; j < hp->np; j++) { |
266 |
+ |
#ifdef DEBUG |
267 |
+ |
if (dp->t != i || dp->p != j) |
268 |
+ |
error(CONSISTENCY, |
269 |
+ |
"division order in comperrs"); |
270 |
+ |
#endif |
271 |
|
b = bright(dp[0].v); |
272 |
|
if (i > 0) { /* from above */ |
273 |
|
b2 = bright(dp[-hp->np].v) - b; |
351 |
|
yd += mag0*sinp + mag1*cosp; |
352 |
|
} |
353 |
|
for (i = 0; i < 3; i++) |
354 |
< |
gv[i] = xd*hp->ux[i] + yd*hp->uy[i]; |
354 |
> |
gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])/PI; |
355 |
|
} |
356 |
|
|
357 |
|
|
383 |
|
yd += mag * sin(phi); |
384 |
|
} |
385 |
|
for (i = 0; i < 3; i++) |
386 |
< |
gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])/(hp->nt*hp->np); |
386 |
> |
gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])*PI/(hp->nt*hp->np); |
387 |
|
} |