转换为度数时,Math.Atan2给出的值不正确

时间:2017-02-25 17:35:09

标签: c# math atan2

我试图测量两个点相对于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.但是,当我期望22.5时,传入(0,0,2,1)将返回26.565051177078。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

你可以通过取26.565度的正切来看到这一点,这个数字非常接近0.5,而22.5度的正切值约为0.414。

(注意,由于切线是周期性的,因此x为0.5,其他值tan x无穷大,但这与此问题无关。)

答案 1 :(得分:0)

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