| 121 |
|
} |
| 122 |
|
src->srad = sqrt(src->srad); |
| 123 |
|
/* compute size vectors */ |
| 124 |
< |
if (f->nv == 4) /* parallelogram case */ |
| 124 |
> |
if (f->nv == 4) { /* parallelogram case */ |
| 125 |
|
for (j = 0; j < 3; j++) { |
| 126 |
|
src->ss[SU][j] = .5*(VERTEX(f,1)[j]-VERTEX(f,0)[j]); |
| 127 |
|
src->ss[SV][j] = .5*(VERTEX(f,3)[j]-VERTEX(f,0)[j]); |
| 128 |
|
} |
| 129 |
< |
else |
| 130 |
< |
setflatss(src); |
| 129 |
> |
} else if (f->nv == 3) { /* triangle case */ |
| 130 |
> |
int near0 = 2; |
| 131 |
> |
double dmin = dist2line(src->sloc, VERTEX(f,2), VERTEX(f,0)); |
| 132 |
> |
for (i = 0; i < 2; i++) { |
| 133 |
> |
double d2 = dist2line(src->sloc, VERTEX(f,i), VERTEX(f,i+1)); |
| 134 |
> |
if (d2 >= dmin) |
| 135 |
> |
continue; |
| 136 |
> |
near0 = i; |
| 137 |
> |
dmin = d2; /* radius = min distance */ |
| 138 |
> |
} |
| 139 |
> |
if (dmin < .08*f->area) |
| 140 |
> |
objerror(so, WARNING, "triangular source with poor aspect"); |
| 141 |
> |
i = (near0 + 1) % 3; |
| 142 |
> |
for (j = 0; j < 3; j++) |
| 143 |
> |
src->ss[SU][j] = VERTEX(f,i)[j] - VERTEX(f,near0)[j]; |
| 144 |
> |
normalize(src->ss[SU]); |
| 145 |
> |
dmin = sqrt(dmin); |
| 146 |
> |
for (j = 0; j < 3; j++) |
| 147 |
> |
src->ss[SU][j] *= dmin; |
| 148 |
> |
fcross(src->ss[SV], f->norm, src->ss[SU]); |
| 149 |
> |
} else |
| 150 |
> |
setflatss(src); /* hope for convex! */ |
| 151 |
|
} |
| 152 |
|
|
| 153 |
|
|
| 175 |
|
src->srad = sqrt(src->ss2/PI); |
| 176 |
|
VCOPY(src->snorm, src->sloc); |
| 177 |
|
setflatss(src); /* hey, whatever works */ |
| 158 |
– |
src->ss[SW][0] = src->ss[SW][1] = src->ss[SW][2] = 0.0; |
| 178 |
|
} |
| 179 |
|
|
| 180 |
|
|
| 196 |
|
VCOPY(src->sloc, so->oargs.farg); |
| 197 |
|
src->srad = so->oargs.farg[3]; |
| 198 |
|
src->ss2 = PI * src->srad * src->srad; |
| 199 |
< |
for (i = 0; i < 3; i++) |
| 181 |
< |
src->ss[SU][i] = src->ss[SV][i] = src->ss[SW][i] = 0.0; |
| 199 |
> |
memset(src->ss, 0, sizeof(src->ss)); |
| 200 |
|
for (i = 0; i < 3; i++) |
| 201 |
|
src->ss[i][i] = 0.7236 * so->oargs.farg[3]; |
| 202 |
|
} |