SIMatrix3.GetQuaternion

Introduced

v3.5

Description

Returns the rotation quaternion representation of this matrix3.

C# Syntax

SIMatrix3.GetQuaternion( SIQuaternion out_pVal );

Scripting Syntax

SIMatrix3.GetQuaternion( q );

Parameters

Parameter Type Description
q SIQuaternion The rotation quaternion containing the new matrix3 values.

Examples

JScript Example

/*
	This example illustrates how to get the orientation of 
	one object relative to another.
*/
// CREATE OBJECTS A & B
var A = ActiveSceneRoot.AddNull("A");
var B = ActiveSceneRoot.AddNull("B");
// GET GLOBAL TRANSFORM OF A & B
var gksA = A.Kinematics.Global; 
var gksB = B.Kinematics.Global; 
var tgA = gksA.Transform;
var tgB = gksB.Transform;
// TRANSLATE & ROTATE A
var vA = XSIMath.CreateVector3(2, 2, 0);
tgA.SetTranslation(vA);
var rA = XSIMath.CreateRotation( 0, 0, XSIMath.DegreesToRadians(45) ); 
tgA.SetRotation(rA);
gksA.Transform = tgA;
// GET LOCAL TRANSFORM OF B RELATIVE TO A
var mA = XSIMath.CreateMatrix3();
var mB = XSIMath.CreateMatrix3();
tgA.GetRotationMatrix3(mA);
tgB.GetRotationMatrix3(mB);
mA.TransposeInPlace();
mB.MulInPlace(mA);
// GET ORIENTATION OF B RELATIVE TO A AS A QUATERNION
var qB = XSIMath.CreateQuaternion();
mB.GetQuaternion(qB);
// LOG RESULT
Application.LogMessage("Q(" + qB.w + "," + qB.x + "," + qB.y + "," + qB.z);	
// Verify result by creating a child on A and transform it to
// have the same orientation as B
var oChild = A.AddNull("Child");
var lksChild = oChild.Kinematics.Local;
var tlChild = XSIMath.CreateTransform();
tlChild.SetRotationFromQuaternion(qB);
lksChild.Transform = tlChild;
// Expected results:
// INFO : Q(0.9238795325112867,0,0,-0.3826834323650898

See Also

SIMatrix3.SetFromQuaternion