与其他变换矩阵的快速四元数向量乘法
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)
因此你必须完整地保留原方程。
我目前正在尝试找到以下等式的等价物:
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)
因此你必须完整地保留原方程。