10

我在 3D 坐标中有一个起点,例如 (0,0,0)。

我有我所指向的方向,由三个角度表示 - 每个旋转角度一个(X 轴旋转,Y 轴旋转,Z 轴旋转)(为了示例,假设我是那些旧标志海龟之一用笔)以及我将沿着我所指的方向行驶的距离。

我将如何计算终点坐标?

我知道对于 2D 系统来说这很简单:

new_x = old_x + cos(angle) * distance
new_y = old_y + sin(angle) * distance

但我不知道如何将其应用于 3 个维度

我想另一种思考方式是尝试在球体表面上找到一个点,知道你指向的方向和球体的半径。

4

3 回答 3

10

首先,要在 3D 中定位一个点,您只需要两个角度(就像您在 2D 中只需要一个角度一样)

其次,由于各种原因(缓慢的 cos&sin,万向节锁定,...),您可能希望首先将方向存储为矢量并完全避免角度。

无论如何,假设方向最初是 z 对齐,然后围绕 x 轴旋转,然后围绕 y 轴旋转。

x=x0 + 距离 * cos (angleZ) * sin (angleY)

Y=y0 + 距离 * sin (Anglez)

Z=z0 + 距离 * cos (angleZ) * cos (angleY)

于 2011-01-10T00:32:07.227 回答
4

基于三个角度,您必须构建 3x3 旋转矩阵。然后矩阵的每一列代表局部的 x、y 和 z 方向。如果您有想要移动的局部方向,则将 3x3 旋转与方向矢量相乘以获得全局坐标中的结果。

我对 3D 坐标转换做了一些介绍,我认为这将回答您的问题。

3D 坐标

3D坐标

于 2011-01-10T05:06:01.767 回答
2

首先,用三个角度来表示方向是很奇怪的——两个就足够了。其次,结果取决于您围绕各个轴转动的顺序。围绕不同轴的旋转不会通勤。

可能您只是在寻找球坐标和笛卡尔坐标之间的转换

于 2011-01-10T00:32:00.583 回答