def euler_angles(self, static=True, axes='xyz'): """The Euler angles from the rotation given by the frame. Parameters ---------- static : bool, optional If true the rotations are applied to a static frame. If not, to a rotational. Defaults to True. axes : str, optional A 3 character string specifying the order of the axes. Defaults to 'xyz'. Returns ------- list of float Three numbers that represent the angles of rotations about the defined axes. Examples -------- >>> ea1 = 1.4, 0.5, 2.3 >>> f = Frame.from_euler_angles(ea1, static=True, axes='xyz') >>> ea2 = f.euler_angles(static=True, axes='xyz') >>> allclose(ea1, ea2) True """ R = matrix_from_basis_vectors(self.xaxis, self.yaxis) return euler_angles_from_matrix(R, static, axes)
def test_euler_angles_from_matrix(): ea1 = 1.4, 0.5, 2.3 args = True, 'xyz' R = matrix_from_euler_angles(ea1, *args) ea2 = euler_angles_from_matrix(R, *args) assert allclose(ea1, ea2)