在我进入我的问题之前,我想指出几件事:1)我知道 cmath 库中已经有一个 atan2 函数,这纯粹是作为一个练习和我自己的练习,2)我知道代码不占0。
好的,所以 tan(theta) = y / x,其中 y 和 x 是平面上的坐标……这意味着:
在 Quads I 和 IV 中 theta = atan(y/x),在 Quads II 和 III 中 theta = atan(y/x) + 180
那么为什么当我使用以下代码时:
float atan(float y, float x)
{
float result = 0.0f;
if (x > 0) //quads I and IV if x is positive
{
result = atanf(y/x);
}
else if (x < 0)
{
result = atan(y/x) + 180; //quads II and III if x is negative
}
return result;
}
它吐我垃圾吗?例如,对于坐标(-4,4),它给了我结果:179.215,当它应该是 135:
atan(4/-4) = -45 度 + 180 度 = 135 度
但正在发生的是计算
atan(4.0f/-4.0f) = -0.785398 + 180 度 = 179.215。
我在这里错过了一些步骤吗?