Page 1 of 1

How to use Euler Angles/Quaternions correctly?

Unread postPosted: Tue Jun 09, 2020 9:26 am
by gerdhofer
Hello there,

I've been going through many examples here, but still don't get how to use Euler Angles and Quaternions in Clarisse's Python :oops:. So I'm hoping that somebody here knows more than me. What I basically want to do is to get the orientation of an object in spac eto move another object along my reference object's direction given through 3 rotation angles. To make it more clearely: consider a guy with a bow. He points the bow in direction of a target and shoots. The arrow will move in direction of the target and this is exactly what I want to achieve.

I know it's possible with Clarisse's on-board tools, but I'm looking for a Python solution. I think I need Euler Angles or Quaternions to do that, but is this possible with the SDK functions in Clarisse? If yes, how do I have to use things like ix.api.GMathMatrix4x4d.compute_euler_angles?

Many thanks for any help,
Gerd

Re: How to use Euler Angles/Quaternions correctly?

Unread postPosted: Mon Jun 29, 2020 4:39 pm
by anemoff
Hi,

Sorry for the late reply.

Here is how to use the API:

py code

# the matrix you want to extract the angles from, must be of type GMathMatrix4x4d
# here, for example, get the matrix from a specified geometry
matrix = ix.get_item("path/to/geometry_object").get_module().get_global_matrix()

# create the output variable that will hold the extracted Euler angles
angles = ix.api.GMathVec3d()

# extract the angles
# the 3rd parameter "order" is optional and its default value is "ix.api.GMATH_ROTATION_ORDER_ZXY"
ix.api.GMathMatrix4x4d.compute_euler_angles(matrix, angles)

# do something with the angles...
print(angles)


Available rotation order values:
Code: Select all
GMATH_ROTATION_ORDER_ZYX
GMATH_ROTATION_ORDER_YZX
GMATH_ROTATION_ORDER_XZY
GMATH_ROTATION_ORDER_ZXY
GMATH_ROTATION_ORDER_YXZ
GMATH_ROTATION_ORDER_XYZ


Hope this helps,

Re: How to use Euler Angles/Quaternions correctly?

Unread postPosted: Sat Jul 04, 2020 11:22 am
by gerdhofer
Thanks Anthony, and no worries about the late reply. Since I'm just trying to understand concepts it wasn't really urgent.

Anyway, maybe you can help me one more time as it doesn't solve my "problem" completely. What I basically want to get is a direction vector and I thought Euler angles might be useful here (but obviously they're not). An example:

When I add a basic polygrid in the XZ plane, my direction vector would point upwards along the Y axis: dir_vec = (0,1,0).
With a rotation of 90 degrees around X the direction would be along the Z axis: dir_vec = (0,0,1)

So, is there any way to extract this direction vector, perhaps from the 3 rotation angles of my plane or through a specific Python function? I was trying to use the polygrid's normals, but they keep their initial values from creation time, and don't consider any later rotations.

I hope you understand what I'm looking for. Thank you!

Re: How to use Euler Angles/Quaternions correctly?

Unread postPosted: Mon Jul 20, 2020 2:33 pm
by anemoff
Hi,

I'm not sure if your question regarding the direction of objects in Clarisse is specific to the polygrid or for any object.

If it's just for the polygrid, consider (0, 1, 0) as its initial direction vector (facing Y-up).
Then you can get the rotated direction using this:

python code

# get rotation
rot = ix.get_item('project://scene/polygrid').get_attribute('rotate').get_vec3d()

rot_mat = ix.api.GMathMatrix4x4d()
rot_mat.make_rotation(rot)

rot_quat = ix.api.GMathQuat()
rot_quat.set_rotation(rot_mat)

# default direction vector: here we use Y-up
dir_vec = ix.api.GMathVec3d(0, 1, 0)

# rotate the default direction vector with the object's rotation quaternion
rot_quat.rotate(dir_vec)
print(dir_vec)


You could do the same for other objects by deciding what initial direction to use, towards X for example with (1, 0, 0).

Hope this helps,

Re: How to use Euler Angles/Quaternions correctly?

Unread postPosted: Tue Jul 21, 2020 9:53 am
by gerdhofer
Fantastic. The polygrid was just meant as an example and I was indeed looking for a solution that covers any type of object. Your code is exactly what I was hoping for, so thanks again for your help. Much appreciated.

Re: How to use Euler Angles/Quaternions correctly?

Unread postPosted: Tue Jul 21, 2020 9:54 am
by anemoff
Great! Glad it helps.