Unity Quaternion - 获取组件B相对于组件A的欧拉角
Unity Quaternion - get Euler angles of a component B relative to component A
我无法理解四元数,并且已经尝试了很多运算符组合(在阅读/查看教程之后)。没有成功 - 只是表明我缺乏理解。甚至尝试使用角度和 atan2() - 但真正向我展示的是万向节锁是什么。我要解决的问题是:
我有一个组件(比如 A,一个立方体)在世界参考系中有一些旋转(实际上旋转是什么并不重要,可以朝向任何方向)。
然后我在世界其他地方有另一个组件(比如 B,另一个立方体)space。该组件的旋转是什么也无关紧要。
我最终想要得到的是 B 相对于 A 的(欧拉)角,但相对于 A 的参照系,而不是世界 space。原因是我想根据 B 从 A 的方向向 A 添加力,然后我可以使用 A.rigidbody.addRelativeForce(x, y, z);
.
卡住了。
谢谢大家的评论,我想我知道了。
供参考,考虑在相同(世界坐标系)坐标内的向量和旋转,可以计算代表原始但从局部坐标系的角度来看的新向量,即原始世界旋转的向量如:
static Vector3 createVectorForLocalRotationFrame(Vector3 worldVector, Quaternion worldRotation, bool normalise)
{
Vector3 localVector = Quaternion.Inverse(worldRotation) * worldVector;
if (normalise)
localVector.Normalize();
return localVector;
}
规范化选项正是我所需要的。别问我效果如何,好像是对的。
我无法理解四元数,并且已经尝试了很多运算符组合(在阅读/查看教程之后)。没有成功 - 只是表明我缺乏理解。甚至尝试使用角度和 atan2() - 但真正向我展示的是万向节锁是什么。我要解决的问题是:
我有一个组件(比如 A,一个立方体)在世界参考系中有一些旋转(实际上旋转是什么并不重要,可以朝向任何方向)。
然后我在世界其他地方有另一个组件(比如 B,另一个立方体)space。该组件的旋转是什么也无关紧要。
我最终想要得到的是 B 相对于 A 的(欧拉)角,但相对于 A 的参照系,而不是世界 space。原因是我想根据 B 从 A 的方向向 A 添加力,然后我可以使用 A.rigidbody.addRelativeForce(x, y, z);
.
卡住了。
谢谢大家的评论,我想我知道了。
供参考,考虑在相同(世界坐标系)坐标内的向量和旋转,可以计算代表原始但从局部坐标系的角度来看的新向量,即原始世界旋转的向量如:
static Vector3 createVectorForLocalRotationFrame(Vector3 worldVector, Quaternion worldRotation, bool normalise)
{
Vector3 localVector = Quaternion.Inverse(worldRotation) * worldVector;
if (normalise)
localVector.Normalize();
return localVector;
}
规范化选项正是我所需要的。别问我效果如何,好像是对的。