我有一个代表物体方向的四元数(黄色框和球体)。我想知道是否可以将该四元数拆分为其他四元数,从而为我们提供每个局部轴(X、Y 和 Z)的旋转。
到目前为止我一直在做的是获取欧拉表示并使用它,但这不是我的特定情况的正确解决方案:
给定两个点(蓝色框),我想限制对象的方向,以便它不能指向灰色平面之外,即使我的四元数看起来不在该平面之外。
我想分割(分解)四元数,因为当我的对象达到平面的极限(例如右侧)时,我想让它留在那里(在该组件中),然后在垂直组件中旋转我的对象,使用新的分割四元数之一。
我正在与 Unity 合作。
我希望我的问题可以理解:)
这是一种获取 y 轴局部旋转的方法。可以修改此函数以获得 x 或 z 轴。
/// <summary> isolate the y-Component of a rotation </summary>
private Quaternion yRotation(Quaternion q)
{
float theta = Mathf.Atan2(q.y, q.w);
// quaternion representing rotation about the y axis
return new Quaternion(0, Mathf.Sin(theta), 0, Mathf.Cos(theta));
}
您可以通过转换为 Euler 在 Unity 检查器中验证结果:
public float yLocal;
void Update()
{
yLocal = yRotation(this.transform.rotation).eulerAngles.y;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)