qToAxisAngle method

(Vector3D, double) qToAxisAngle()

Implementation

(Vector3D outAxis, double outAngle) qToAxisAngle() {
  final q = w.abs() > 1.0 ? normalize() : this;

  Vector3D resAxis = .zero();
  final resAngle = 2.0*math.acos(q.w);
  final den = math.sqrt(1.0 - q.w*q.w);

  if (den > Raylib.instance.EPSILON) {
    resAxis.x = q.x/den;
    resAxis.y = q.y/den;
    resAxis.z = q.z/den;
  } else {
    // This occurs when the angle is zero.
    // Not a problem: just set an arbitrary normalized axis.
    resAxis.x = 1.0;
  }

  return (resAxis, resAngle);
}