Math.Atan2 在转换为度数时给出了错误的值

Math.Atan2 gives incorrect value when converting to degrees

我正在尝试测量两点之间相对于 X 轴的角度,以度为单位。

通过查看有关堆栈溢出的其他帖子,我一直在使用以下代码:

private double GetAngleBetweenTwoPoints(double x1, double y1, double x2, double y2)
{
    return Math.Atan2(y2 - y1, x2 - x1) * 180.0 / Math.PI;
}

问题是,这似乎适用于某些值,但不适用于其他值。例如,正确传入 (0, 0, 1, 1) returns 值 45。但是,传入 (0, 0, 2, 1) returns 26.565051177078 而我期望的是 22.5。

我做错了什么?

0.5的反正切是26.565度,不是22.5度。

您可以通过取 26.565 度的正切值看到这一点,它给出的数字非常接近 0.5,而 22.5 度的正切值大约为 0.414。

(注意,正切是循环的,还有无数其他值 x 其中 tan x 为 0.5,但这与此问题无关。)

(1,1)角的半角线是通过半径[=13的圆上(1,1)(sqrt(2),0)的中点的角平分线=].因此,您正在为 22.5°.

的角度寻找点 (0.5+\sqrt(0.5), 0.5)