gpt4 book ai didi

c# - 为什么 Quaternion.FromToRotation(rotation * axis, axis) * rotation 可以限制一个自由度?

转载 作者:行者123 更新时间:2023-11-30 23:01:07 30 4
gpt4 key购买 nike

我从 Unity 插件 Final IK 中看到了这行代码。

整个函数是这样的:

//Limits rotation to a single degree of freedom (along axis)

protected static Quaternion Limit1DOF(Quaternion rotation, Vector3 axis)
{
return Quaternion.FromToRotation(rotation * axis, axis) * rotation;
}

这看起来既优雅又快速,但我不明白它是如何工作的。为什么这可以限制一个DOF?

最佳答案

直觉上,FromToRotation() 部分正在恢复围绕 axis 以外的轴的任何旋转分量。它通过将旋转轴推回 axis 来实现这一点。

更详细一点:你想找到一个接近 R 的旋转 R1DOF 并且限制在一个自由度内(关于 的旋转轴)。因此,您希望使用 R 转换 axis 保留 axis:

R1DOF * axis = axis

我在这里稍微滥用了符号,因为 R 是一个四元数,而四元数的转换不仅仅是一次乘法。让我们声明 * 是转换运算符。

现在,我们将 R1DOF 表示为 M * R,其中 M 是映射 R * 轴< 的修改旋转axis。为了清楚起见,我们调用 axisAfterR = R * axis。如果我们这样做,那么:

R1DOF * axis = M * R * axis
= M * axisAfterR

由于我们定义了 M 以便将 axisAfterR 映射到 axis,我们有

             = axis

这正是我们想要的。

因此,(及其所有倍数)是R1DOF 的不动点。因此,R1DOF 是围绕 的旋转。

关于c# - 为什么 Quaternion.FromToRotation(rotation * axis, axis) * rotation 可以限制一个自由度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51223923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com