【发布时间】:2014-01-16 22:06:09
【问题描述】:
所以我有以下角度(弧度):3.45575213 现在我通过 cos & sin 将其转换为向量(之前 tDir 为零):
tDir.x += cos(target->direction);
tDir.y += sin(target->direction);
现在我通过以下方式将其转换回来:
float newDir = Wrap2PI(atan2(tDir.y, tDir.x));
包装看起来像这样:
inline float Wrap2PI(float u)
{
while(u < 0)
u += PI2;
while (u >= PI2)
u -= PI2;
return u;
}
PI:
const float PI = 3.14159265359f;
const float PI2 = PI*2.0f;
结果明显不同:3.45575237
当这个计算每秒执行 120 次时,这种差异真的很大,或者至少看起来是这样,因为我的对象是顺时针旋转的,这是我设法在我的代码中找到的唯一不准确之处。有没有办法获得更好的结果?
编辑:发现问题!这不是不准确,向量有时是 0,0 !我的错!
【问题讨论】:
-
float只有 6-7 位有效的小数位精度。所以这个结果是意料之中的。 -
对于 32 位
float,这并没有“显着不同”。