-3

我正在尝试测量两点之间相对于 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) 会正确返回值 45。但是,传入 (0, 0, 2, 1) 会返回 26.565051177078,而我预计是 22.5。

我究竟做错了什么?

4

2 回答 2

2

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

您可以通过取 26.565 度的切线来看到这一点,这给出了一个非常接近 0.5 的数字,而 22.5 度的切线大约是 0.414。

(注意,切线是周期性的,还有无数其他值为0.5 的值xtan x但这与这个问题无关。)

于 2017-02-25T17:38:20.393 回答
0

(1,1)的半角线是通过中点的角平分线,(1,1)两者(sqrt(2),0)都在半径为 的圆上sqrt(2)。因此,您正在寻找(0.5+\sqrt(0.5), 0.5)角度 的点22.5°

于 2017-02-25T17:57:27.080 回答