数学计算检索两点之间的角度?

可能重复:
如何计算两点相对于水平轴的角度?

我一直在寻找这个年龄,这真的很烦我,所以我决定只问…

如果我有两个点(即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时符号已经反转了。