9 |
|
|
10 |
|
#include "rtmath.h" |
11 |
|
|
12 |
< |
#define DCSCALE 11585.2 /* (1<<13)*sqrt(2) */ |
12 |
> |
#define DCSCALE 11584.7 /* (1<<13)*sqrt(2) - .5 */ |
13 |
|
#define FXNEG 01 |
14 |
|
#define FYNEG 02 |
15 |
|
#define FZNEG 04 |
28 |
|
|
29 |
|
for (i = 0; i < 3; i++) |
30 |
|
if (dv[i] < 0.) { |
31 |
< |
cd[i] = (int)(dv[i] * -DCSCALE); |
31 |
> |
cd[i] = (int)(dv[i] * -DCSCALE + .5); |
32 |
|
dc |= FXNEG<<i; |
33 |
|
} else |
34 |
< |
cd[i] = (int)(dv[i] * DCSCALE); |
34 |
> |
cd[i] = (int)(dv[i] * DCSCALE + .5); |
35 |
|
if (!(cd[0] | cd[1] | cd[2])) |
36 |
|
return(0); /* zero normal */ |
37 |
|
if (cd[0] <= cd[1]) { |
94 |
|
dv[0] = dv[1] = dv[2] = 0.; |
95 |
|
return; |
96 |
|
} |
97 |
< |
d1 = ((dc>>F1SFT & FMASK)+.5)*(1./DCSCALE); |
98 |
< |
d2 = ((dc>>F2SFT & FMASK)+.5)*(1./DCSCALE); |
97 |
> |
d1 = (dc>>F1SFT & FMASK)*(1./DCSCALE); |
98 |
> |
d2 = (dc>>F2SFT & FMASK)*(1./DCSCALE); |
99 |
|
der = sqrt(1. - d1*d1 - d2*d2); |
100 |
|
dv[itab[ndx][0]] = d1; |
101 |
|
dv[itab[ndx][1]] = d2; |
111 |
|
dir2diff(int32 dc1, int32 dc2) /* approx. radians^2 between directions */ |
112 |
|
{ |
113 |
|
FVECT v1, v2; |
114 |
+ |
|
115 |
+ |
if (dc1 == dc2) |
116 |
+ |
return 0.; |
117 |
|
|
118 |
|
decodedir(v1, dc1); |
119 |
|
decodedir(v2, dc2); |