从四元数中读取特定的值
本文关键字:读取 四元数 | 更新日期: 2023-09-27 18:15:04
我想从Unity四元数中读取以下值https://docs.unity3d.com/ScriptReference/Quaternion.html
如果x旋转(螺距)为180(或0)
如果y旋转(滚动)为180(或0)
获得z旋转(偏航)的最有效公式是什么?
我在网上找到了这个公式来得到z轴,这是最有效的吗?Z = qz/sqrt(1-qw*qw)http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/
您不必使用复杂的公式来读取四元数的值。Unity已经帮你做到了!
最简单的方法是像这样读取四元数的欧拉角:Vector3 angle = rotation.eulerAngles;
你可以很容易地读取每个旋转angle.x
,…
我发布的公式是从四元数到角度和轴的转换。我需要的是欧拉角的四元数。我意识到我不需要x和y角。
在网上找到一些代码,并根据我的需要塑造它,这只将z角转换为弧度(1.3 ms 10K迭代)
public double GetZAngle(Quaternion q1)
{
double sqw = q1.w * (double)q1.w;
double sqx = q1.x * (double)q1.x;
double sqy = q1.y * (double)q1.y;
double sqz = q1.z * (double)q1.z;
double unit = sqx + sqy + sqz + sqw; // If normalized is one, otherwise is correction factor
double test = (double)q1.x * q1.y + (double)q1.z * q1.w;
if (test > 0.499 * unit) // Singularity at north pole
return Math.PI / 2;
if (test < -0.499 * unit) // Singularity at south pole
return -Math.PI / 2;
return Math.Asin(2 * test / unit);
}
没有明确的模式来区分x和y角度是否为0,但这里有一个代码片段显示了如何以弧度检索所有它们(2.14 ms 10K迭代(比Unity的3 ms更快))http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/