| 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; |