MrC*_*ear -2 navigation delphi math trigonometry
我目前正在使用航路点开发导航系统,我们可以定义以下边界,假设 B 点是我们要去的地方,A 点是您当前的位置:
我的问题是我将如何获得最小的转弯角度以面对 B 点(我们的目的地)?
我目前的方法是使用 ArcTan2(X,Y)
B := ArcTan2(Y1 - Y2,X1 - X2)
B := B * 180 / pi ---- 将弧度转换为度数。
这确实会返回一个合适的角度,但只是有时......其他时候它会返回一个角度,使我面向 B 点(我们的目的地)的相反方向。
我遇到的另一个问题是确定我应该向左转还是向右转 - 假设我们返回的角度为 80 度,那么这是否意味着我向左或向右旋转?
我希望我的解释有点清楚,三角学从来都不是我的强项。
对于你们可以提供给我的任何意见或来源,我将不胜感激。
谢谢清除先生
您使用了错误的 X/Y 参数顺序
B := ArcTan2(Y2 - Y1, X2 - X1)
Run Code Online (Sandbox Code Playgroud)
是从第一个点到第二个点获得方向的正确公式。
如果您确实需要旋转角度,则还必须提供当前方向(或前一点)
让你从 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));
Run Code Online (Sandbox Code Playgroud)
请注意,函数返回带符号的角度,您可以轻松检查是否需要向左或向右转。此外RadToDeg功能有助于获得学位。