我想从Unity Quaternion 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/
答案 0 :(得分:1)
您不必使用复杂的公式来读取Quaternion中的值。 Unity已经为你做了!
最简单的方法是阅读 Quaternion 的 Euler Angle ,如下所示:
Vector3 angle = rotation.eulerAngles;
您可以轻松阅读每个轮换angle.x
,...
答案 1 :(得分:0)
我发布的公式是从四元数到角度和轴的转换。我需要的是四元数到欧拉角。我意识到我无论如何都不需要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; 3更快) ms))http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/