我试图测量两个点相对于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。
我做错了什么?
答案 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°
。