我目前正在尝试找到以下等式的等价物:
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/
中所述计算的旋转矩阵如果不是,后面使用的数学是什么?
答案 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)
因此,您必须完整保留原始等式。