@@ -220,7 +220,7 @@ def test_neutral_attitude():
220220 a = sat ._attitude (t )
221221 # Attitude should be the negative of position vector.
222222 neg_p = - array (p ) / length_of (array (p ))
223- assert allclose (a .center .au , p )
223+ assert allclose (a .center .xyz . au , p )
224224 assert allclose (a .target , neg_p )
225225
226226def test_attitude ():
@@ -232,17 +232,37 @@ def test_attitude():
232232
233233 for angle in angles :
234234 abs_angle = abs (angle )
235+ # Angle between attitude and position vector after pitch or roll should
236+ # be equal to the provided angle.
235237 a = sat ._attitude (t , roll = angle )
236238 assert isclose (angle_between (a .target , - pos ), abs_angle )
237239
238240 a = sat ._attitude (t , pitch = angle )
239241 assert isclose (angle_between (a .target , - pos ), abs_angle )
240242
243+ # Yaw without other rotations should not change attitude.
241244 a = sat ._attitude (t , yaw = angle )
242245 assert isclose (angle_between (a .target , - pos ), 0.0 )
243246
244- a = sat ._attitude (t , pitch = angle , yaw = angle )
245- assert allclose (angle_between (a .target , - pos ), abs_angle )
247+ # Angle between attitude and position vector after yaw with pitch or
248+ # or roll should be equal to the provided angle, regardless of order.
249+ a = sat ._attitude (t , pitch = angle , yaw = angle , rotation_order = "yz" )
250+ assert isclose (angle_between (a .target , - pos ), abs_angle )
251+
252+ a = sat ._attitude (t , pitch = angle , yaw = angle , rotation_order = "zy" )
253+ assert isclose (angle_between (a .target , - pos ), abs_angle )
254+
255+ a = sat ._attitude (t , roll = angle , yaw = angle , rotation_order = "xz" )
256+ assert isclose (angle_between (a .target , - pos ), abs_angle )
257+
258+ a = sat ._attitude (t , roll = angle , yaw = angle , rotation_order = "zx" )
259+ assert isclose (angle_between (a .target , - pos ), abs_angle )
246260
247- a = sat ._attitude (t , roll = angle , yaw = angle )
248- assert allclose (angle_between (a .target , - pos ), abs_angle )
261+ # Rotations applied in reverse will result in different attitudes,
262+ # but the angle between attitude and position vector should be equal.
263+ axyz = sat ._attitude (t , roll = angle , pitch = angle , yaw = angle )
264+ azyx = sat ._attitude (t , roll = angle , pitch = angle , yaw = angle ,
265+ rotation_order = "zyx" )
266+ assert isclose (
267+ angle_between (axyz .target , - pos ), angle_between (azyx .target , - pos )
268+ )
0 commit comments