给定起始点、每个旋转轴上的角度和方向,计算终点。

9

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

我有我的方向,由三个角度表示 - 分别为每个旋转角度 (绕X、绕Y和绕Z轴旋转) (为了举例子,假设我是那些带笔的旧商标海龟),以及我将沿着此方向行进的距离。

我要如何计算出结束点的坐标?

我知道对于二维系统,它会很简单:

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

但我无法弄清如何将其应用于三维空间

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


“在x轴旋转,y轴旋转”是什么意思?你不能在一个维度上进行旋转 - 在二维中只有1个旋转平面,在三维中只有2个旋转平面。 - Kirk Broadhurst
@Kirk是正确的。这样想:要表示3D中的一个点,您需要3个标量(数字)。但是您有4个(3个角度和一个距离)。某些内容是多余的... - Dr. belisarius
抱歉,我对三维坐标系统还不熟悉。我有沿着这些轴的角度,如偏航(Yaw),俯仰(Pitch)和翻滚(Roll)。我应该让这一点更清楚。 - Nick Udell
3个回答

10

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

其次,由于各种原因(慢的cos和sin函数,万向锁等),你可能希望一开始就将方向存储为向量,避免使用角度。

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

x=x0 + 距离 * cos (角度Z) * sin (角度Y)

Y=y0 + 距离 * sin (角度z)

Z=z0 + 距离 * cos (角度Z) * cos (角度Y)


4
基于三个角度,您需要构建3x3旋转矩阵。然后矩阵的每一列代表本地的x、y和z方向。如果您有一个本地方向要移动,那么将3x3旋转矩阵与方向向量相乘,以在全局坐标系中得到结果。
我做了一个小介绍,关于3D坐标变换,我认为这将回答您的问题。
3D坐标 3D coordinates

2

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

也许您只是在寻找球坐标系和直角坐标系之间的转换


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接