104 |
|
|
105 |
|
|
106 |
|
hdbcoord(gc, hp, i) /* compute beam coordinates from index */ |
107 |
< |
BCOORD gc; /* returned */ |
107 |
> |
GCOORD gc[2]; /* returned */ |
108 |
|
register HOLO *hp; |
109 |
|
register int i; |
110 |
|
{ |
111 |
|
register int j, n; |
112 |
|
int n2, reverse; |
113 |
< |
BCOORD g2; |
113 |
> |
GCOORD g2[2]; |
114 |
|
/* check range */ |
115 |
|
if (i < 1 | i > nbeams(hp)) |
116 |
|
return(0); |
150 |
|
int |
151 |
|
hdbindex(hp, gc) /* compute index from beam coordinates */ |
152 |
|
register HOLO *hp; |
153 |
< |
register BCOORD gc; |
153 |
> |
register GCOORD gc[2]; |
154 |
|
{ |
155 |
< |
BCOORD g2; |
155 |
> |
GCOORD g2[2]; |
156 |
|
int reverse; |
157 |
|
register int i, j; |
158 |
|
/* check ordering and limits */ |
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; |
210 |
|
int i; |
211 |
|
{ |
212 |
< |
BCOORD gc; |
212 |
> |
GCOORD gc[2]; |
213 |
|
register int k; |
214 |
|
|
215 |
|
if (!hdbcoord(gc, hp, i)) /* compute grid coordinates */ |
246 |
|
hdray(ro, rd, hp, gc, r) /* compute ray within a beam */ |
247 |
|
FVECT ro, rd; /* returned */ |
248 |
|
register HOLO *hp; |
249 |
< |
register BCOORD gc; |
249 |
> |
register GCOORD gc[2]; |
250 |
|
BYTE r[2][2]; |
251 |
|
{ |
252 |
|
FVECT p[2]; |
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; |
279 |
|
|
280 |
|
double |
281 |
|
hdinter(gc, r, hp, ro, rd) /* compute ray intersection with section */ |
282 |
< |
register BCOORD gc; /* returned */ |
282 |
> |
register GCOORD gc[2]; /* returned */ |
283 |
|
BYTE r[2][2]; /* returned */ |
284 |
|
register HOLO *hp; |
285 |
|
FVECT ro, rd; /* rd should be normalized */ |