方向矢量的欧拉旋转

时间:2010-05-29 20:16:21

标签: 3d vector rotation

我在3D空间中定义了一个具有位置,旋转和缩放值的对象(全部定义为3D矢量)。它还具有向上和向前的方向向量。当我旋转对象时,我需要这些方向向量随之旋转。

假设我的向上矢量是(0,1,0)并且我的前向矢量在零旋转时是(0,0,1),我怎么能实现这个呢?

2 个答案:

答案 0 :(得分:4)

您可以将当前矢量与旋转矩阵(Wikipedia entry,在“基本旋转”下)相乘。如果旋转在2轴或更多轴上,只需乘以适当的矩阵。例如,如果在X轴上旋转30度,在Y轴上旋转60度,则乘以

|    1         0          0     |
|    0    cos(pi/6)  -sin(pi/6) |
|    0    sin(pi/6)   cos(pi/6) |

然后通过

| cos(pi/3)    0      sin(pi/3) |
|    0         1          0     |
| -sin(pi/3)   0      cos(pi/3) |

答案 1 :(得分:1)

将这些矢量中的每一个旋转的角度与旋转对象的角度相同。假设你绕z轴旋转(即(0,0,1))

方程将是:

x' = x cos(angle) + y sin(angle)
y' = -x sin(angle) + y cos(angle)
z' = z

你的“向上”向量是(0,1,0),因此;

x' = 0 * cos(angle) + 1 * sin(angle) = sin(angle)
y' = -0 * sin(angle) + 1 * cos(angle) = cos(angle)
z' = 0

你“转发”向量是(0,0,1),所以:

x' = 0
y' = 0
z' = 1

它不会旋转,因为我们围绕z轴旋转,这是向前向量的parellel