py3dframe.Frame.set_global_quaternion#
- Frame.set_global_quaternion(quaternion, *, convention=None, scalar_first=True)[source]#
Set the quaternion representation of the rotation between the global frame and this frame in the given convention.
The quaternion must be a array-like with 4 elements in the scalar first [w, x, y, z] or scalar last [x, y, z, w] convention.
See also
attribute
parentto get or set the parent frame.attribute
conventionto get or set the convention of the frame.attribute
global_quaternionto get or set the quaternion between the global frame and this frame in the convention of the frame.method
get_global_quaternion()to get the quaternion between the global frame and this frame in a specific convention.method
set_quaternion()to set the quaternion between the parent frame and this frame in a specific convention.
- Parameters:
quaternion (numpy.ndarray) – The quaternion between the global frame and this frame in the given convention as an array-like with 4 elements.
convention (Optional[int], optional) – Integer in
[0, 7]selecting the convention. Defaults to the frame’s own convention.scalar_first (bool, optional) – If True, the quaternion is in the scalar first convention. Default is True.
- 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 quaternion between the global frame and the person frame in the convention 4 and scalar first convention, you can set this quaternion with the
set_global_quaternion()method:import numpy quaternion = ... # Get the new quaternion between the global frame and the person frame in convention 4 in the scalar first convention from the application. person.set_global_quaternion(quaternion, convention=4, scalar_first=True) # Set the quaternion between the global frame and the person frame in convention 4 in the scalar first convention.
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)