根据罗盘方向计算位移

Calculating Displacement based on the compass direction

我需要一些帮助来编写位移计算程序。给定物体在 XY 平面中移动的距离,以及物体的偏航(航向),我想计算物体的位移。例如,对象向北移动了 5m,向东移动了 2m。

我有的数据是它在XY平面上行进的距离(X距离和Y距离)和由X方向确定的设备航向。我知道如何在纸上计算但我我无法对其进行编程。

我附上了两个示例,展示了我是如何获得计算结果的。黑点是物体的位移。在第一个示例中,行进的 X 距离为 3 米,而 Y 距离为 4 米,X 轴的航向为 70°。经过计算,我设法得到它向南行驶了2.733m,向东行驶了4.187m。在示例2中,它行驶,X距离为-5m,Y距离为-12m,航向为160°。我计算出物体向北移动 8.80m,向东移动 9.566m。

Example 1 Example 2

您所做的是从极坐标到笛卡尔坐标的转换。 https://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates

如果您的笛卡尔坐标未与极轴对齐,只需将旋转角度添加到极轴参数即可进行补偿。

假设您将 XY 窗格旋转了某个角度 Zp 并在该窗格内有一个 2D 运动矢量,假设它的方向旋转了 Zv – 什么是矢量的总旋转,相对于全局方向? Zp + Zv...

因此,您需要做的就是将旋转 Zp 应用于 XY-pane 内的运动矢量,即。 e.将旋转矩阵应用于向量。旋转 z 的矩阵如下所示:

cos(z)  -sin(z)
sin(z)   cos(z)

根据我们上面的数据:

north = cos(Zp) * x - sin(Zp) * y
east  = sin(Zp) * x + cos(Zp) * y

在应用您的第一个示例数据后给出:

north = cos(70°) * 3 - sin(70°) * 4 ~ -2.7327
east  = sin(70°) * 3 + cos(70°) * 4 ~  4.1872

north = cos(160°) * -5 - sin(160°) * -12 ~ 8.8027
east  = sin(160°) * -5 + cos(160°) * -12 ~ 9.5662

几乎与您计算的值相对应(注意:向北的负向移动是向南的正向移动...)。