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

Luk*_*ark 10 c# math distance angle

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

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

提供我有两个点(即X1,Y1,和X2,Y2),我想计算这两个点之间的角度,假设的是,当Y1 == y 2和X1> X2的角度为180度...

我有以下代码,我一直在使用(使用高中的知识),我似乎无法产生预期的结果.

float xDiff = x1 - x2;
float yDiff = y1 - y2;
return (float)Math.Atan2(yDiff, xDiff) * (float)(180 / Math.PI);
Run Code Online (Sandbox Code Playgroud)

提前谢谢,我很沮丧......

pha*_*t0m 21

从我收集的内容来看,您需要以下内容:

  • 水平线:P1 -------- P2=> 0°
  • 水平线:P2 -------- P1=> 180°

顺时针旋转水平线

你说,你希望角度顺时针方向增加.

如此旋转该线P1 -------- P2,P1P2该角度必须为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;
Run Code Online (Sandbox Code Playgroud)

但是,atan2让我们在CCW方向上增加角度.在原点周围沿CCW方向旋转,y经过以下值:

  • y = 0
  • y> 0
  • y = 0
  • y <0
  • y = 0

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