c ++中的atan问题

时间:2012-07-14 14:52:31

标签: c++ math logic

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

我在这里错过了一些步骤吗?

3 个答案:

答案 0 :(得分:11)

标准atan和atan2函数以及所有其他使用角度的C函数都可以使用弧度,而不是度数。

如果您希望自己的函数输出度数,则必须将atanf的返回值乘以180/pi;保持所有弧度,加上pi而不是180。

答案 1 :(得分:3)

atan用弧度说话,而不是用度数说话......

答案 2 :(得分:3)

atan以弧度形式返回结果。您可以转换为度数= 180 *弧度/π的度数。