úÎI D0Y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXNone/02345 #3-2-1 Euler angle rotation sequence YZ[  YZ[NoneT9doesn't require RealFloat, used for overloading symbolics Rotate a vector about the X axis)trunc $ rotateXyzAboutX (V3 0 1 0) (pi/2)V3 0.0 0.0 1.0)trunc $ rotateXyzAboutX (V3 0 0 1) (pi/2)V3 0.0 (-1.0) 0.0 Rotate a vector about the Y axis)trunc $ rotateXyzAboutY (V3 0 0 1) (pi/2)V3 1.0 0.0 0.0)trunc $ rotateXyzAboutY (V3 1 0 0) (pi/2)V3 0.0 0.0 (-1.0) Rotate a vector about the Z axis)trunc $ rotateXyzAboutZ (V3 1 0 0) (pi/2)V3 0.0 1.0 0.0)trunc $ rotateXyzAboutZ (V3 0 1 0) (pi/2)V3 (-1.0) 0.0 0.0"Convert quaternion to Euler angles0euler321OfQuat (Quaternion 1.0 (V3 0.0 0.0 0.0)).Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 0.0}@euler321OfQuat (Quaternion (sqrt(2)/2) (V3 (sqrt(2)/2) 0.0 0.0))=Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 1.5707963267948966}@euler321OfQuat (Quaternion (sqrt(2)/2) (V3 0.0 (sqrt(2)/2) 0.0))<Euler {eYaw = 0.0, ePitch = 1.5707963267948966, eRoll = 0.0}@euler321OfQuat (Quaternion (sqrt(2)/2) (V3 0.0 0.0 (sqrt(2)/2)))=Euler {eYaw = 1.5707963267948966, ePitch = -0.0, eRoll = 0.0}convert a DCM to a quaternion/quatOfDcm $ V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1)(Quaternion 1.0 (V3 (-0.0) (-0.0) (-0.0))2quatOfDcm $ V3 (V3 0 1 0) (V3 (-1) 0 0) (V3 0 0 1)CQuaternion 0.7071067811865477 (V3 (-0.0) (-0.0) 0.7071067811865474)Glet s = sqrt(2)/2 in quatOfDcm $ V3 (V3 s s 0) (V3 (-s) s 0) (V3 0 0 1)CQuaternion 0.9238795325112868 (V3 (-0.0) (-0.0) 0.3826834323650898)Convert DCM to euler angles3euler321OfDcm $ V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1).Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 0.0}6euler321OfDcm $ V3 (V3 0 1 0) (V3 (-1) 0 0) (V3 0 0 1)=Euler {eYaw = 1.5707963267948966, ePitch = -0.0, eRoll = 0.0}Klet s = sqrt(2)/2 in euler321OfDcm $ V3 (V3 s s 0) (V3 (-s) s 0) (V3 0 0 1)=Euler {eYaw = 0.7853981633974483, ePitch = -0.0, eRoll = 0.0}FConvert DCM to euler angles. Returns Nan if r[1,3] is outside (-1, 1).9unsafeEuler321OfDcm $ V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1).Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 0.0}<unsafeEuler321OfDcm $ V3 (V3 0 1 0) (V3 (-1) 0 0) (V3 0 0 1)=Euler {eYaw = 1.5707963267948966, ePitch = -0.0, eRoll = 0.0}Qlet s = sqrt(2)/2 in unsafeEuler321OfDcm $ V3 (V3 s s 0) (V3 (-s) s 0) (V3 0 0 1)=Euler {eYaw = 0.7853981633974483, ePitch = -0.0, eRoll = 0.0};unsafeEuler321OfDcm $ V3 (V3 0 0 1.1) (V3 0 0 0) (V3 0 0 0)-Euler {eYaw = 0.0, ePitch = NaN, eRoll = 0.0}"Convert Euler angles to quaternionquatOfEuler321 (Euler 0 0 0)Quaternion 1.0 (V3 0.0 0.0 0.0)!quatOfEuler321 (Euler (pi/2) 0 0)=Quaternion 0.7071067811865476 (V3 0.0 0.0 0.7071067811865475)!quatOfEuler321 (Euler 0 (pi/2) 0)=Quaternion 0.7071067811865476 (V3 0.0 0.7071067811865475 0.0)!quatOfEuler321 (Euler 0 0 (pi/2))=Quaternion 0.7071067811865476 (V3 0.7071067811865475 0.0 0.0)convert a quaternion to a DCM+dcmOfQuat $ Quaternion 1.0 (V3 0.0 0.0 0.0)5V3 (V3 1.0 0.0 0.0) (V3 0.0 1.0 0.0) (V3 0.0 0.0 1.0)Ilet s = sqrt(2)/2 in fmap trunc $ dcmOfQuat $ Quaternion s (V3 0.0 0.0 s)8V3 (V3 0.0 1.0 0.0) (V3 (-1.0) 0.0 0.0) (V3 0.0 0.0 1.0)IdcmOfQuat $ Quaternion 0.9238795325112867 (V3 0.0 0.0 0.3826834323650898)tV3 (V3 0.7071067811865475 0.7071067811865476 0.0) (V3 (-0.7071067811865476) 0.7071067811865475 0.0) (V3 0.0 0.0 1.0)Convert DCM to euler anglesFfmap trunc $ dcmOfEuler321 $ Euler {eYaw = 0.0, ePitch = 0, eRoll = 0}5V3 (V3 1.0 0.0 0.0) (V3 0.0 1.0 0.0) (V3 0.0 0.0 1.0)Gfmap trunc $ dcmOfEuler321 $ Euler {eYaw = pi/2, ePitch = 0, eRoll = 0}8V3 (V3 0.0 1.0 0.0) (V3 (-1.0) 0.0 0.0) (V3 0.0 0.0 1.0)Gfmap trunc $ dcmOfEuler321 $ Euler {eYaw = pi/4, ePitch = 0, eRoll = 0}tV3 (V3 0.7071067811865476 0.7071067811865475 0.0) (V3 (-0.7071067811865475) 0.7071067811865476 0.0) (V3 0.0 0.0 1.0) vec_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\] !"#$%&'  !"#$%  !"#$%\] !"#$%&'None 23459;<=?I()*+,-./012345^6789:;  (-)*+,./0123456()*+,-/01234 .56 ()*+,-./012345^6789:;_         !"#$%&'()*+,-./012345667889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd+spatial-math-0.2.7.0-HAAjPq9IesrLBjt7CWTbNk SpatialMath SpatialMathTTypes$linear-1.20.5-ALqHTYew01KD1PdDd6TYmz Linear.MatrixM33Linear.Quaternion Quaternion Linear.V3V3_xyz_zR3 Linear.V2_xy_yR2 Linear.V1_xR1EulereYawePitcheRollArcTan2arctan2rotateXyzAboutXrotateXyzAboutYrotateXyzAboutZeuler321OfQuat quatOfDcm quatOfDcmB2A euler321OfDcmunsafeEuler321OfDcmquatOfEuler321 dcmOfQuat dcmOfEuler321 dcmOfQuatB2A rotVecByDcmrotVecByDcmB2A rotVecByQuatrotVecByQuatB2A rotVecByEulerrotVecByEulerB2A$fArcTan2Float$fArcTan2DoubleRotationcomposerotrot'toDcm transposeM33TRotunRV3TunVcrossorthonormalize $fRotationV3a$fRotationQuaterniona$fR3V3T$fR2V3T$fR1V3T $fFunctorV3T $fFoldableV3T$fTraversableV3T$fApplicativeV3T $fAdditiveV3T $fMetricV3T $fStorableV3T$fNumV3T$fFractionalV3T$fEqV3T $fShowV3T$fOrdV3T $fGeneric1V3T $fGenericV3T$fSerializeV3T $fBinaryV3T $fFunctorRot $fFoldableRot$fTraversableRot $fStorableRot$fNumRot$fFractionalRot$fEqRot $fShowRot$fOrdRot $fGeneric1Rot $fGenericRot$fSerializeRot $fBinaryRot$fApplicativeEuler $fBinaryEuler$fSerializeEuler normalize' quatConjugatequatMult