| 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]) { |
| 61 |
|
dv[0] = dv[1] = dv[2] = 0.; |
| 62 |
|
return; |
| 63 |
|
} |
| 64 |
< |
d1 = ((dc>>F1SFT & FMASK)+.5)*(1./DCSCALE); |
| 65 |
< |
d2 = ((dc>>F2SFT & FMASK)+.5)*(1./DCSCALE); |
| 64 |
> |
d1 = (dc>>F1SFT & FMASK)*(1./DCSCALE); |
| 65 |
> |
d2 = (dc>>F2SFT & FMASK)*(1./DCSCALE); |
| 66 |
|
der = sqrt(1. - d1*d1 - d2*d2); |
| 67 |
|
if (dc & F1X) { |
| 68 |
|
dv[0] = d1; |
| 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); |