public static Quaternion log(Quaternion q) {
   final double norm = q.norm();
   return new Quaternion(
       Math.log(norm),
       (Double3Vector) q.imag().normalize().scalarMultiply(Math.acos(q.re / norm)));
 }