根据罗盘方向计算位移
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
几乎与您计算的值相对应(注意:向北的负向移动是向南的正向移动...)。
我需要一些帮助来编写位移计算程序。给定物体在 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
几乎与您计算的值相对应(注意:向北的负向移动是向南的正向移动...)。