【发布时间】:2013-07-10 07:08:56
【问题描述】:
首先,这不是重复的。所有其他看似相关的问题都要求四元数表示 2 个向量的方向之间的旋转,即解决方案不考虑这 2 个向量的范数。
这就是我想要的。想象一下,我有非单位向量 a = (0, 0, 2) 和 b = (3, 1, 2)。遵循最初的汉密尔顿对四元数的定义q = a / b(这个定义是象征性的,因为你当然不能划分向量)。请参阅Wikipedia for this concept。从中我可以推断(也许这很天真)我能以某种方式找到q 和q * b = a。
换句话说,给定a 和b 我想找到一个四元数q 乘以b 将得到a。请注意,我对简单的旋转(单一)四元数不感兴趣,它只会将b 旋转到a 的方向。实际上,除了旋转之外,我还希望b 的范数也可以缩放到a 的范数。
是的,我知道我可以分两个阶段进行:使用标准酉四元数方法旋转 b,然后手动将旋转后的 b 缩放到 a 的范数,这当然会涉及额外的平方根 (这是我在这里试图避免的)。事实上,我想要这两个操作的计算高效组合,我觉得这是可以实现的,但信息并不广泛,因为它似乎不是传统的用例。
也许我错了。请分享你的经验。谢谢。
因为我对彻底的数学推导或解释不感兴趣。我关心的是构造这种四元数的计算效率算法。不过,如果答案中包含这些细节,我真的很感激,可能还有其他人将来也会偶然发现同样的问题。
对于接近投票者:
继续关闭Finding quaternion representing the rotation from one vector to another。
此外,我已正确标记了我的问题。我的问题属于 StackOverflow 中这些人口众多的标签。因此,您关闭的理由没有任何意义。
【问题讨论】:
-
就四元数而言,你有
conjugate(x)*x = norm(x)^2。真正的四元数是中心的(与所有四元数交换),所以q = 1/norm(b)^2 * a * conjugate(b)将满足q*b = a,并且不涉及平方根。 -
这可能更适合math.stackexchange.com
-
@BlueRaja:不,我的问题与编程更相关,我对算法感兴趣,而不是深入的数学理解(尽管如果包含在答案中也很好)。
-
@Daniel Fischer:对不起,我对
q = 1/norm(b)^2 * a * conjugate(b)公式有点困惑。a和b是向量,而不是四元数。我错过了什么吗?如何用向量构造四元数?出于同样的原因,conjugate(b)看起来很奇怪。 -
对于所有亲密的选民:继续并关闭stackoverflow.com/questions/1171849/…。
标签: algorithm math 3d linear-algebra quaternions