Math.Atan2产生奇怪的结果?

时间:2013-02-17 23:58:32

标签: c# math .net-4.0

首先,我的数学不强!但我正在计算从原点(0,0)到(-1,-1)的点的角度。

该角度为225°或5π/ 4.

  • 5π/ 4 = 3.9269908169872415480783042290994
  • Math.Atan2(-1,-1)= -2.3561944901923448

也许我对Math.Atan2的理解是不正确的,但我认为这意味着在一个原点为(0,0)的圆上给出两个点的角度。我假设这里发生的是Atan2的结果是“翻转”,因为它位于X轴的负面...有人可以确认并提供正确的方法吗?

这是我的测试,但失败了:

Assert.AreEqual((5 * Math.PI) / 4, Math.Atan2(-1, -1));

这是我的PointD类,它持有点X和Y:

public double ToRadians()
{
    double radians = Math.Atan2(this.Y, this.X);

    return radians;
}

1 个答案:

答案 0 :(得分:13)

你的假设是正确的。 Atan2给出-pi到+ pi范围内的结果。 * 如果你想要0到2pi范围内的数字,如果结果小于0,只需加2pi。


注意:断言像这样的浮点值的相等通常不是一个好主意......


*为了将来参考,这种细节通常在文档中明确给出。例如:http://msdn.microsoft.com/en-us/library/system.math.atan2.aspx