【问题标题】:Flipping issue when interpolating Rotations using Quaternions使用四元数插值旋转时的翻转问题
【发布时间】:2010-05-22 01:45:47
【问题描述】:

我使用 slerp 在表示旋转的两个四元数之间进行插值。然后将生成的旋转提取为欧拉角,以输入图形库。这种作品,但我有以下问题;沿绿色箭头方向围绕两个(一个工作正常)轴旋转时,如左框架所示

here

旋转很快就会跳来跳去,从相反的位置旋转到相反的视觉方向,如右框架中的红色箭头所示。

从数学的角度来看,这可能是合乎逻辑的(尽管对我来说不是),但这是不受欢迎的。当围绕多个轴旋转时,如何实现没有视觉翻转和方向改变的插值,始终遵循绿色箭头直到插值完成?

提前致谢。

【问题讨论】:

  • 这就是为什么我们讨厌问题中的链接...

标签: math 3d rotation interpolation quaternions


【解决方案1】:

坦率地说,您对问题的描述有点难以理解。但听起来你需要否定你的四元数之一。

请记住,每个旋转实际上可以由两个四元数 q 和 -q 表示。但是从 q 到 w 的 Slerp 路径将不同于从 (-q) 到 w 的路径:一个会走远,另一个会走近。听起来,当你想要走捷径时,你就会走得更远。

尝试取两个四元数的点积(即 4-D 点积),如果点积为负数,请在执行 Slerp 之前将四元数 q1 和 q2 替换为 -q1 和 q2。

【讨论】:

  • 如果我没记错的话,可以通过保持四元数标准化来避免这种情况。
  • 归一化与此无关; q 和 -q 的大小相同。规范化仅使 q 除了旋转对象外,还不能缩放对象。我认为彼得对这个问题的解释是正确的。当在两个旋转 q0 qnd q1 之间旋转时,Dot(q0, q1) 必须为正。如果不是,请将 q1 替换为 -q1。
【解决方案2】:

总旋转距离是多少?您可能会要求对角度相距太远的两个方向进行插值。从某种意义上说,数学,无论是否是四元数,都难以决定走哪条路。就像动画中没有足够的关键帧一样。

在中途确定一个好的中间方向,并从初始方向到中间方向,从中间方向到最终方向进行单独的插值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2012-05-08
    • 2018-08-25
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多