úÎU&O¼e      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdNone/02345#3-2-1 Euler angle rotation sequenceefgefgNoneT9doesn'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}ZConvert quaternion to Euler angles. Returns Nan if 2.0*(q1*q3 - q0*q2) is outside [-1, 1].6unsafeEuler321OfQuat (Quaternion 1.0 (V3 0.0 0.0 0.0)).Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 0.0}FunsafeEuler321OfQuat (Quaternion (sqrt(2)/2) (V3 (sqrt(2)/2) 0.0 0.0))=Euler {eYaw = 0.0, ePitch = -0.0, eRoll = 1.5707963267948966}FunsafeEuler321OfQuat (Quaternion (sqrt(2)/2) (V3 0.0 (sqrt(2)/2) 0.0))-Euler {eYaw = 0.0, ePitch = NaN, eRoll = 0.0}FunsafeEuler321OfQuat (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 quaternion. The scalar part of the result may be positive or negative.quatOfEuler321 (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_ah !"i#$%&'()*+ !"#$%&'() !#"$%&'()h !"i#$%&'()*+None 23459;<=?IQR,-./0123456789:;<=>?@ABCDEFG,  ,0-1./23456789:;<=>?@A,,-./01234567 8A9:;<>=?@,-./0123456789:;<=>?@ABCDEFGj              !"#$%&'()*+,-./0123456789:;;<==>?*+%)('#$@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi+spatial-math-0.3.0.0-Dqp0VTsSbmHILyOQtucnEt SpatialMathT SpatialMathTypes)TypeCompose-0.9.12-CUb55uJGeK65Htq0yqldJXControl.ComposeunOO:.$linear-1.20.5-ALqHTYew01KD1PdDd6TYmz Linear.MatrixM33Linear.Quaternion Quaternion Linear.V3V3_xyz_zR3 Linear.V2_xy_yR2 Linear.V1_xR1EulereYawePitcheRollArcTan2arctan2rotateXyzAboutXrotateXyzAboutYrotateXyzAboutZeuler321OfQuatunsafeEuler321OfQuat quatOfDcm quatOfDcmB2A euler321OfDcmunsafeEuler321OfDcmquatOfEuler321 dcmOfQuat dcmOfEuler321 dcmOfQuatB2A rotVecByDcmrotVecByDcmB2A rotVecByQuatrotVecByQuatB2A rotVecByEulerrotVecByEulerB2A$fArcTan2Float$fArcTan2DoubleRotationcomposerotrot' transposeidentityRotunRotV3TunVcrossorthonormalize$fRotationEulera $fRotation:.a$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' quatConjugate