QuaternionToAxisAngle function

(Vector3, double) QuaternionToAxisAngle(
  1. Quaternion q
)

Returns (axis, angle) — replaces the C out-pointer API.

Implementation

(Vector3, double) QuaternionToAxisAngle(Quaternion q) {
  final qq = q.w > 1 ? q.normalized() : q;
  final angle = 2 * math.acos(qq.w);
  final s = math.sqrt(1 - qq.w * qq.w);
  if (s < 1e-4) return (Vector3(qq.x, qq.y, qq.z), angle);
  return (Vector3(qq.x / s, qq.y / s, qq.z / s), angle);
}