QuaternionToEuler function
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));
}