通过给定四元数旋转单位向量

时间:2014-02-02 19:47:52

标签: java opengl math rotation quaternions

我正在尝试计算从我的opengl相机中指出的单位向量。给定一个旋转四元数(w,x,y,z),我如何计算该四元数周围单位向量的旋转?

在这种情况下,单位矢量可以限制为(0,0,-1)。

编辑:最终解决方案

旋转(0,0,1):

vec.x=2*x*z - 2*y*w;
vec.y=2*y*z + 2*x*w;
vec.z=1 - 2*x*x - 2*y*y;

请注意,矩阵需要转置才能与OpenGL一起使用。

1 个答案:

答案 0 :(得分:3)

将四元数转换为3x3旋转矩阵,并将此旋转应用于矢量。

对于单位(w, x, y, z)四元数,此矩阵为:

      ( 1 - 2 * ( y * y + z * z )      2 * ( x * y - z * w )      2 * (x * z + y * w ) )
  R = (     2 * ( x * y + z * w )  1 - 2 * ( x * x + z * z )      2 * (y * z - x * w ) )
      (     2 * ( x * z - y * w )      2 * ( y * z + x * w )  1 - 2 * (x * x + y * y ) )

如果向量具有(0, 0, -1)这样的简单形式,则不需要计算旋转矩阵的所有9个系数,因为矩阵向量乘法的结果仅使用一些系数(最后一列) R)。