c ++中的atan问题

Dav*_*rey 0 c++ math logic

在我遇到问题之前,我想指出一些事情: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.