创建导航系统 (ArcTan2)

Creating a navigation system (ArcTan2)

我目前正在使用航路点开发导航系统,我们可以定义以下周界,假设 B 点是我们要去的地方,A 点是您当前的位置:

我的问题是如何获得最小的转弯角度以面向 B 点(我们的目的地)?

我目前的方法是使用 ArcTan2(X,Y)

B := ArcTan2(Y1 - Y2,X1 - X2)

B := B * 180 / pi ---- 将弧度转换为度数。

这 return 是一个合适的角度,但只是有时...其他时候 return 是一个让我面对 B 点(我们的目的地)相反方向的角度。

我遇到的另一个问题是弄清楚我应该向左转还是向右转 - 假设我们有一个 80 度的 returned 角,那么这是否意味着我向左或向右旋转?

我希望我的解释有点清楚,三角学从来都不是我的强项。

如果你们能提供给我任何意见或资源,我将不胜感激。

谢谢 清先生

您使用了错误的 X/Y 参数顺序

B := ArcTan2(Y2 - Y1, X2 - X1)

是从第一个点到第二个点得到方向 的正确公式。

如果确实需要转弯的角度,还必须提供当前方向(或前一点)

让你从A点移动到B点,在B点之后你需要转向C点。在这种情况下你需要计算相对角度来改变方向(这种方法使用向量的叉积):

 CBX := C.X - B.X; 
 CBY := C.Y - B.Y; 
 BAX := B.X - A.X; 
 BAY := B.Y - A.Y;

RotationAngle := 
  RadToDeg(ArcTan2(CBX * BAY - CBY * BAX, CBX * BAX + CBY * BAY));

注意函数 returns 带符号的角度,您可以轻松检查是否需要左转或右转。 RadToDeg 函数也有助于获得学位。

如果你有两个点(xA, yA)(xB, yB),以点A为起点,点B为终点,你有一个从起点到终点的矢量:

v = (xB-xA)i + (yB-yA)j

在二维坐标系中,x轴在右,y轴在上,这个向量与水平轴的夹角很容易计算:

angle = atan2((yB-yA), (xB-xA))

其中

i = unit vector in x-direction

j = unit vector in y-direction

这个角度以弧度表示。以A点为中心从水平轴逆时针旋转

注意零长度向量。