/** * Returns a tangent Quaternion for {@code center}, defined by {@code before} and {@code after} * quaternions. * * @param before the first Quaternion * @param center the second Quaternion * @param after the third Quaternion */ public static final Quaternion squadTangent( Quaternion before, Quaternion center, Quaternion after) { Quaternion l1 = Quaternion.lnDif(center, before); Quaternion l2 = Quaternion.lnDif(center, after); Quaternion e = new Quaternion(); e.x = -0.25f * (l1.x + l2.x); e.y = -0.25f * (l1.y + l2.y); e.z = -0.25f * (l1.z + l2.z); e.w = -0.25f * (l1.w + l2.w); return Quaternion.multiply(center, e.exp()); }