0

在我进入我的问题之前,我想指出几件事: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。

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

4

3 回答 3

11

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

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

于 2012-07-14T14:59:30.343 回答
3

atan 用弧度表示,而不是度数...

于 2012-07-14T14:57:25.993 回答
3

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

于 2012-07-14T14:58:30.630 回答