在我遇到问题之前,我想指出一些事情:1)我知道在cmath库中已经有一个atan2函数,这纯粹是一个练习和我自己的练习,2)我知道代码不占0.
好吧,所以tan(theta)= y/x,其中y和x是平面上的坐标......这意味着:
四元组和第四组中的theta = atan(y/x),四元组和第三组中的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;
}
Run Code Online (Sandbox Code Playgroud)
它吐了我垃圾吗?例如,对于坐标(-4,4),它给出了结果:179.215,它应该是135:
atan(4/-4)= -45度+ 180度= 135度
但正在发生的是计算
atan(4.0f/-4.0f)= -0.785398 + 180度= 179.215.
我在这里错过了一些步骤吗?
Mic*_*sen 11
标准atan和atan2函数以及所有其他使用角度的C函数都使用弧度而不是度数.
如果您希望自己的函数输出度数,则必须将atanf的返回值乘以180/pi; 保持所有弧度,添加pi而不是180.