úÎ #      !" Safe-Inferedq_out = q_in^-1  return ||q|| q /= ||q|| quaternion multiply: qa * qb #quaternion multiply then normalize #$ #$ Safe-Infered c = a (cross) b c = a (dot) b c = vec (dot) vec norm(x)  norm(a - b) vec_out = vec_in*scale_factor vec_out = scale (new_norm/norm(vec_in)) vec_in vec_out = vec_in/ norm(vec_in)  v_out = M*v  %&     %& Safe-Inferedvec_b = R_a2b * vec_a vec_a = R_a2b^T * vec_b !#vec_b = q_a2b * vec_a * q_a2b^(-1)  vec_b = R(q_a2b) * vec_a  !"  !"  !"  !"'       !"#$%&spatial-math-0.1.0.0SpatialMath.QuatSpatialMath.Xyz SpatialMathQuat zipWithQuatinvnorm normalizeqmultqmult'Xyz zipWithXyzcrossdot normSquareddistancescale normalizeTo mult3x3ByXyzmult3x3TransposeByXyzEulerrotateXyzAboutXeuler321OfQuat quatOfDcm quatOfDcmB2A euler321OfDcmquatOfEuler321 dcmOfQuat dcmOfQuatB2A rotVecByDcmrotVecByDcmB2A rotVecByQuatrotVecByQuatB2A $fNumQuat $fFunctorQuat$fNumXyz $fFunctorXyz