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