3d 方向向量的欧拉旋转

3d 方向向量的欧拉旋转,3d,vector,rotation,3d,Vector,Rotation,我在3D空间中定义了一个具有位置、旋转和缩放值的对象(全部定义为3D向量)。它还具有向上和向前方向向量。当我旋转对象时,我需要这些方向向量与它一起旋转 假设我的上方向向量是(0,1,0),而我的前方向向量是(0,0,1),在零旋转时,我如何实现这一点?您可以将当前向量与旋转矩阵相乘(,在“基本旋转”下)。如果旋转在2个或更多轴上,只需乘以适当的矩阵即可。例如,如果在X轴上旋转30度,在Y轴上旋转60度,则乘以 | 1 0 0 | | 0

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


假设我的上方向向量是(0,1,0),而我的前方向向量是(0,0,1),在零旋转时,我如何实现这一点?

您可以将当前向量与旋转矩阵相乘(,在“基本旋转”下)。如果旋转在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) |

只需将这些向量中的每一个旋转相同的角度,就可以使对象旋转。假设你绕z轴旋转(即(0,0,1))

方程式为:

x' = x cos(angle) + y sin(angle)
y' = -x sin(angle) + y cos(angle)
z' = z
你的“上”向量是(0,1,0),因此

你的“向前”向量是(0,0,1),所以:

它不会旋转,因为我们是绕z轴旋转的,z轴平行于你们的前向向量

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