创建导航系统 (ArcTan2)
Creating a navigation system (ArcTan2)
我目前正在使用航路点开发导航系统,我们可以定义以下周界,假设 B 点是我们要去的地方,A 点是您当前的位置:
- 我们知道点 A 和 B 的位置 (X,Y)。
- A 点(您)和 B 点(我们的目的地)各自的 X 和 Y 值均为正值。
- 我们知道A点(你)面对的角度。 (360 - 0 度)
我的问题是如何获得最小的转弯角度以面向 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点为中心从水平轴逆时针旋转
注意零长度向量。
我目前正在使用航路点开发导航系统,我们可以定义以下周界,假设 B 点是我们要去的地方,A 点是您当前的位置:
- 我们知道点 A 和 B 的位置 (X,Y)。
- A 点(您)和 B 点(我们的目的地)各自的 X 和 Y 值均为正值。
- 我们知道A点(你)面对的角度。 (360 - 0 度)
我的问题是如何获得最小的转弯角度以面向 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点为中心从水平轴逆时针旋转
注意零长度向量。