数学计算检索两点之间的角度?
可能重复:
如何计算两点相对于水平轴的角度?
我一直在寻找这个年龄,这真的很烦我,所以我决定只问…
如果我有两个点(即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);
在此先感谢,我变得非常沮丧……
从我收集的内容来看,您需要以下内容:
- 水平线:
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 = 0
- y> 0
- y = 0
- y <0
- y = 0
这意味着,我们可以简单地反转y
的符号来翻转方向。 但是因为C#的坐标从上到下增加,所以在计算yDiff
时符号已经反转了。