py3dframe.Frame.set_global_euler_angles#

Frame.set_global_euler_angles(euler_angles, *, convention=None, degrees=False, seq='xyz')[source]#

Set the Euler angles representation of the rotation between the global frame and this frame in the given convention.

The Euler angles must be a array-like with 3 elements representing the angles of rotation about the specified axes.

See also

  • attribute parent to get or set the parent frame.

  • attribute convention to get or set the convention of the frame.

  • attribute global_euler_angles to get or set the Euler angles between the global frame and this frame in the convention of the frame.

  • method get_global_euler_angles() to get the Euler angles between the global frame and this frame in a specific convention.

  • method set_euler_angles() to set the Euler angles between the parent frame and this frame in a specific convention.

Parameters:
  • euler_angles (numpy.ndarray) – The Euler angles between the global frame and this frame in the given convention as an array-like with 3 elements.

  • convention (Optional[int], optional) – Integer in [0, 7] selecting the convention. Defaults to the frame’s own convention.

  • degrees (bool, optional) – If True, the Euler angles are in degrees. Default is False (radians).

  • seq (str, optional) – The axes of the Euler angles. It must be a string of 3 characters chosen among ‘X’, ‘Y’, ‘Z’, ‘x’, ‘y’, ‘z’. Default is “xyz”.

Return type:

None

Examples

Lets consider a train and a person standing into the train.

First we can define the train frame relative to the global frame (the canonical frame) and then we can define the person frame relative to the train frame.

from py3dframe import Frame

train = Frame.from_axes(origin=[0, 0, 0], x_axis=[1, 0, 0], y_axis=[0, 1, 0], z_axis=[0, 0, 1], parent=None)
person = Frame.from_axes(origin=[0, 1, 0], x_axis=[1, 0, 0], y_axis=[0, 1, 0], z_axis=[0, 0, 1], parent=train)

Lets assume the train moves.

train.set_translation([10, 0, 0], convention=0) # The train moves of 10 units along the x axis of the global frame.

If an application using an other convention gives the new Euler angles between the global frame and the person frame in the convention 4, with the axes “zyx” and in degrees, you can set these Euler angles with the set_global_euler_angles() method:

import numpy

euler_angles = ... # Get the new Euler angles between the global frame and the person frame in convention 4 with the axes "zyx" and in degrees from the application.

person.set_global_euler_angles(euler_angles, convention=4, seq="zyx", degrees=True) # Set the Euler angles between the global frame and the person frame in convention 4 with the axes "zyx" and in degrees.

The person frame is updated accordingly to keep the correct transformation between the global frame and the person frame.

Then we can determine the new orientation and position of the person relative to the train frame:

print("Person origin in the train frame:", person.origin)
print("Person axes in the train frame:", person.axes)