178 |
|
} |
179 |
|
|
180 |
|
|
181 |
+ |
hdcell(cp, hp, gc) /* compute cell coordinates */ |
182 |
+ |
register FVECT cp[4]; /* returned (may be passed as FVECT cp[2][2]) */ |
183 |
+ |
HOLO *hp; |
184 |
+ |
register GCOORD *gc; |
185 |
+ |
{ |
186 |
+ |
register int i; |
187 |
+ |
register FLOAT *v; |
188 |
+ |
double d; |
189 |
+ |
/* compute each corner */ |
190 |
+ |
for (i = 0; i < 4; i++) { |
191 |
+ |
VCOPY(cp[i], hp->orig); |
192 |
+ |
if (gc->w & 1) { |
193 |
+ |
v = hp->xv[gc->w>>1]; |
194 |
+ |
cp[i][0] += *v++; cp[i][1] += *v++; cp[i][2] += *v; |
195 |
+ |
} |
196 |
+ |
d = (double)( gc->i[0] + (i&1) ) / hp->grid[wg0[gc->w]]; |
197 |
+ |
v = hp->xv[wg0[gc->w]]; |
198 |
+ |
cp[i][0] += d * *v++; cp[i][1] += d * *v++; cp[i][2] += d * *v; |
199 |
+ |
|
200 |
+ |
d = (double)( gc->i[1] + (i>>1) ) / hp->grid[wg1[gc->w]]; |
201 |
+ |
v = hp->xv[wg1[gc->w]]; |
202 |
+ |
cp[i][0] += d * *v++; cp[i][1] += d * *v++; cp[i][2] += d * *v; |
203 |
+ |
} |
204 |
+ |
} |
205 |
+ |
|
206 |
+ |
|
207 |
|
hdlseg(lseg, hp, i) /* compute line segment for beam */ |
208 |
|
register int lseg[2][3]; |
209 |
|
register HOLO *hp; |
264 |
|
hp->grid[wg0[gc[i].w]]; |
265 |
|
v = hp->xv[wg0[gc[i].w]]; |
266 |
|
p[i][0] += d * *v++; p[i][1] += d * *v++; p[i][2] += d * *v; |
267 |
< |
d = (gc[i].i[1] + (1./256.)*(r[i][1]+.5)) / |
267 |
> |
d = ( gc[i].i[1] + (1./256.)*(r[i][1]+.5) ) / |
268 |
|
hp->grid[wg1[gc[i].w]]; |
269 |
|
v = hp->xv[wg1[gc[i].w]]; |
270 |
|
p[i][0] += d * *v++; p[i][1] += d * *v++; p[i][2] += d * *v; |