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

时间:2012-10-15 08:04:59

标签: c# math distance angle

  

可能重复:
  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);

提前致谢,我感到非常沮丧...

1 个答案:

答案 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 = 0
  • y> 0
  • y = 0
  • y< 0
  • y = 0

这意味着,我们可以简单地反转y的符号来翻转方向。但是因为C#的坐标从上到下增加,所以在计算yDiff时符号已经反转。