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

时间:2015-05-18 14:42:18

标签: math matrix 3d quaternions rotational-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)

as

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/

中所述计算的旋转矩阵

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

2 个答案:

答案 0 :(得分:1)

请注意,将矢量乘以

inverse(VM) * conversion_to_matrix(q) * VM

与将其乘以

不同
conversion_to_matrix(q)

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

答案 1 :(得分:-1)

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

完全有效。 问题是......

inverse(VM) * conversion_to_matrix(q) * VM

不等于

conversion_to_matrix(q)

因此,您必须完整保留原始等式。