为何四元数-向量乘法会得到两种不同计算结果?
问题原因分析
你的两次输出差异,核心是四元数乘法顺序颠倒,对应两种完全不同的旋转操作:
正确的旋转逻辑
四元数旋转向量的标准公式是 v' = q * v * q⁻¹(当q是单位四元数时,q的逆等于共轭q_conj)。你提供的qv_mult函数实现的正是这个逻辑:
def qv_mult(q1, v1): return q_mult(q_mult(q1, v1), q_conjugate(q1))[1:]
用固定的q和v计算,结果应为你给出的Output 2,这是符合预期的旋转结果,手动验算也能对应上。
产生错误输出的原因
你给出的Output 1是q_conj * v * q的计算结果,这是逆旋转操作(把向量往相反方向旋转)。出现这个结果,说明你在某次运行时,不小心修改了qv_mult里的乘法顺序,比如误写成:
def qv_mult(q1, v1): return q_mult(q_conjugate(q1), q_mult(v1, q1))[1:]
或者其他颠倒乘法顺序的写法。
额外验证
你的q模长约为1,符合单位四元数要求,因此用共轭代替逆是正确的,不会出现缩放问题。
内容的提问来源于stack exchange,提问作者Frederik Petri
相关产品推荐
相关产品推荐

