71 |
|
/* avoid circular aiming failures */ |
72 |
|
if ((source[si->sn].sflags & SCIR) && (si->np > 1 || dstrsrc > 0.7)) { |
73 |
|
FVECT trim; |
74 |
– |
double d; |
74 |
|
if (source[si->sn].sflags & (SFLAT|SDISTANT)) { |
75 |
|
d = 1.12837917; /* correct setflatss() */ |
76 |
|
trim[SU] = d*sqrt(1.0 - 0.5*vpos[SV]*vpos[SV]); |
84 |
|
d = vpos[SW]*vpos[SW]; |
85 |
|
if (d > trim[SW]) trim[SW] = d; |
86 |
|
trim[SU] += d; |
87 |
< |
d = 1.0/0.7236; /* correct sphsetsrc() */ |
88 |
< |
trim[SW] = trim[SV] = trim[SU] = |
89 |
< |
d*sqrt(trim[SW]/trim[SU]); |
87 |
> |
if (trim[SU] > FTINY*FTINY) { |
88 |
> |
d = 1.0/0.7236; /* correct sphsetsrc() */ |
89 |
> |
trim[SW] = trim[SV] = trim[SU] = |
90 |
> |
d*sqrt(trim[SW]/trim[SU]); |
91 |
> |
} else |
92 |
> |
trim[SW] = trim[SV] = trim[SU] = 0.0; |
93 |
|
} |
94 |
|
for (i = 0; i < 3; i++) |
95 |
|
vpos[i] *= trim[i]; |