QuaternionToEuler function

Vector3 QuaternionToEuler(
  1. Quaternion q
)

Returns Euler angles (roll, pitch, yaw) as Vector3 (radians).

Implementation

Vector3 QuaternionToEuler(Quaternion q) {
  final x0 = 2 * (q.w * q.x + q.y * q.z);
  final x1 = 1 - 2 * (q.x * q.x + q.y * q.y);
  final sinP = (2 * (q.w * q.y - q.z * q.x)).clamp(-1.0, 1.0);
  final z0 = 2 * (q.w * q.z + q.x * q.y);
  final z1 = 1 - 2 * (q.y * q.y + q.z * q.z);
  return Vector3(math.atan2(x0, x1), math.asin(sinP), math.atan2(z0, z1));
}