【问题标题】:Euler rotation of direction vector方向向量的欧拉旋转
【发布时间】:2011-02-25 13:25:49
【问题描述】:

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

假设我的向上向量是 (0, 1, 0) 并且我的前向向量是 (0, 0, 1) 在零旋转时,我该如何实现?

【问题讨论】:

    标签: 3d vector rotation


    【解决方案1】:

    您可以将当前向量与旋转矩阵相乘(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) |
    

    【讨论】:

      【解决方案2】:

      只需将这些向量中的每一个旋转与对象旋转相同的角度即可。假设您正在绕 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 轴旋转,这与您的前向矢量平行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-26
        • 1970-01-01
        • 2010-12-06
        • 2015-07-28
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 2014-07-03
        相关资源
        最近更新 更多