c# - Math.Atan2 产生奇怪的结果?

标签 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;
}

最佳答案

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


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


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

关于c# - Math.Atan2 产生奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927585/

相关文章:

c# - NullReferenceException 未处理 - 什么是 null?

c# - Windows线程池和CLR线程池有什么区别

c# - 避免在锁内和锁外重复if语句

asp.net - 强制 ASP.Net MVC Bundle 按特定顺序呈现 javascript 文件

math - 您需要在 Windows 框中输入 10,000 位 e

c# - 如何抑制由我​​无法更改的代码显示的对话框?

c# - 如何处理 .net MVC Core 中的动态错误页面?

c# - 格式不太好的json的反序列化

math - 如果添加新边,图的强连通分量的数量如何变化

math - 使用勾股定理计算两点之间的距离