与其他变换矩阵的快速四元数向量乘法

Fast Quaternion-Vector Multiplication with other Transformation Matrices

我目前正在尝试找到以下等式的等价物:

vec_res = inverse(VM) * (q * (VM * vec_input) * conjugate(q))

其中VM是标准视图矩阵,q是归一化四元数,vec_input 一个向量。

形式为:

vec_res = A * vec_input;

vec_res = q' * vec_input * conjugate(q');

来自https://molecularmusings.wordpress.com/2013/05/24/a-faster-quaternion-vector-multiplication/我已经在计算了

vec_res = inverse(VM) * q * VM * vec_input * conjugate(q)

作为

pN = (VM * vec_input);
vec3 tempVec = 2.0 * cross(q.xyz, pN);
pN = pN + q.w * tempVec + cross(q.xyz, tempVec);
pN = inverse(VM) * pN;

我的问题是,我有权这样重写方程吗?

vec_res = (inverse(VM) * conversion_to_matrix(q) * VM) * vec_input

其中 conversion_to_matrix 是按照以下解释计算的旋转矩阵:http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/

如果不是,后面要用到的数学是什么?

请注意,将向量乘以

inverse(VM) * conversion_to_matrix(q) * VM

不等于乘以

conversion_to_matrix(q)

因为矩阵乘法不可交换。所以你真的必须计算上面第一个公式中给出的整个矩阵。

vec_res = (inverse(VM) * conversion_to_matrix(q) * VM) * vec_input

完全正确。 问题是...

inverse(VM) * conversion_to_matrix(q) * VM

不等于

conversion_to_matrix(q)

因此你必须完整地保留原方程。