为了提高性能并处理更易于操作和保存的整数角度,而不是浮点数作为角度,我正在构建一个sin查找函数,其中4096个单位等于2pi弧度。为了节省内存,我只存储前1024个sin值,这相当于sin([0,pi/2))。
为了处理第三和第四象限的角度,我只需有条件地取反:
static const float SinTable[1024] = {0, 0.00153398, ..., 0.999995, 0.999999};
为了处理第三和第四象限的角度,我只需有条件地取反:
return Angle&2048 ? -UnsignedSin : UnsignedSin;
其中UnsignedSin
是介于[0, 2048)
之间的正弦值。但是我如何处理第二象限和第四象限?如何通过检查角度是否在第二或第四象限(例如使用 Angle&1024
)有条件地将存储的正弦值从[0, 1)
映射到[1, 0)
?我尝试了这个方法,但不完全正确,因为1024
角度的结果是 0.999999而不是应该为1。
const float UnsignedSin = SinTable[(Angle&1024 ? ~A : A)&1023];
在sin表中,1的值从未被存储,所以我认为需要使用1-SinTable[...]
?但是我无法完全理解。