- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 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/
我已经为这个问题苦苦挣扎了太多小时,现在是时候寻求您的帮助了。 情况 我有一个移动的角色,我四处走动并与它行走的表面对齐。我通过将光线转换到下一个表面并获得与表面对齐所需的旋转来做到这一点 Quate
每当我运行这段代码时,我都会遇到多个错误: transform.rotation = Quaternion.FromToRotation (Vector3(0, 0, 0), Vector3(0, 0
我从 Unity 插件 Final IK 中看到了这行代码。 整个函数是这样的: //Limits rotation to a single degree of freedom (along axis
我是一名优秀的程序员,十分优秀!