SIMatrix3.GetQuaternion

導入

v3.5

詳細

matrix3の回転のクォータニオン表現を戻します。

スクリプト 構文

SIMatrix3.GetQuaternion( q );

パラメータ

パラメータ タイプ 詳細
Q SIQuaternion 新しい3x3行列の値を含む、回転のクォータニオン

JScript の例

/*
        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

関連項目

SIMatrix3.SetFromQuaternion