在我遇到问题之前,我想指出一些事情:1)我知道在cmath库中已经有一个atan2函数,这纯粹是一个练习和我自己的练习,2)我知道代码不占0。
好的,所以tan(theta)= y / x,其中y和x是平面上的坐标......这意味着:
在Quad I和IV中的theta = atan(y / x),和 在Quad 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。
我在这里错过了一些步骤吗?答案 0 :(得分:11)
标准atan和atan2函数以及所有其他使用角度的C函数都可以使用弧度,而不是度数。
如果您希望自己的函数输出度数,则必须将atanf的返回值乘以180/pi
;保持所有弧度,加上pi而不是180。
答案 1 :(得分:3)
atan用弧度说话,而不是用度数说话......
答案 2 :(得分:3)
atan
以弧度形式返回结果。您可以转换为度数= 180 *弧度/π的度数。