C# 单位四元数-获取组件B相对于组件a的欧拉角
我无法理解四元数,在阅读/查看教程后,我尝试了许多关于四元数的运算符组合。没有成功-只是表明我缺乏理解。甚至尝试过角度和atan2()-但真正让我看到的是万向节锁是什么。我试图解决的问题是: 我有一个组件(比如一个立方体),在世界参照系中有一些旋转(实际上,旋转是什么并不重要,可以朝向任何方向) 然后我在世界空间的其他地方有另一个组件(比如B,另一个立方体)。该组件的旋转是什么也不重要 最后我想得到的是B相对于A的(欧拉)角,但是相对于A的参考系,而不是世界空间。原因是我想根据B从A的方向向A添加力,然后我可以使用C# 单位四元数-获取组件B相对于组件a的欧拉角,c#,unity3d,quaternions,euler-angles,C#,Unity3d,Quaternions,Euler Angles,我无法理解四元数,在阅读/查看教程后,我尝试了许多关于四元数的运算符组合。没有成功-只是表明我缺乏理解。甚至尝试过角度和atan2()-但真正让我看到的是万向节锁是什么。我试图解决的问题是: 我有一个组件(比如一个立方体),在世界参照系中有一些旋转(实际上,旋转是什么并不重要,可以朝向任何方向) 然后我在世界空间的其他地方有另一个组件(比如B,另一个立方体)。该组件的旋转是什么也不重要 最后我想得到的是B相对于A的(欧拉)角,但是相对于A的参考系,而不是世界空间。原因是我想根据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;
}
正常化选项正是我所需要的。不要问我它是如何工作的,但它似乎是正确的。你能用像A.transform.InverseTransformDirection或A.transform.InverseTransformVector这样的东西吗?你试过看吗?