可能重复:
How to calculate the angle between two points relative to the horizontal axis?
我多年来一直在寻找这个,这真的很烦我,所以我决定只是问......
如果我有两个点(即x1,y1和x2,y2),我想计算这两个点之间的角度,假设当y1 == y2且x1> x2角度为180度......
我有以下代码(使用高中的知识),我似乎无法产生预期的结果。
float xDiff = x1 - x2;
float yDiff = y1 - y2;
return (float)Math.Atan2(yDiff, xDiff) * (float)(180 / Math.PI);
提前致谢,我感到非常沮丧...
答案 0 :(得分:19)
从我收集的内容来看,您需要保留以下内容:
P1 -------- P2
=> 0°P2 -------- P1
=> 180°你说,你希望角度顺时针方向增加。
旋转此行P1 -------- P2
使P1
高于P2
,角度必须为90°。
但是,如果我们向相反方向旋转,P1
将低于P2
且角度为-90°或270°。
atan2
基础:考虑P1
作为原点并衡量P2
相对于原点的角度,P1 -------- P2
将正确地产生0
}。
float xDiff = x2 - x1;
float yDiff = y2 - y1;
return Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI;
然而,atan2
让CCW方向的角度增加。
围绕原点在CCW方向上旋转,y
将经历以下值:
这意味着,我们可以简单地反转y
的符号来翻转方向。但是因为C#的坐标从上到下增加,所以在计算yDiff
时符号已经反转。