Object Hierarchy | Related C++ Class: CRotation
This object represents a rotation in 3D space. It supports three
representation methods: X, Y and Z Euler angles, Quaternion and 3
by 3 matrix.
Note: When represented as X,Y,Z Euler angles the values are always
in Radians, not degrees.
/*
Demonstrates different representations of a rotation:
-As a SIRotation object
-As a 3x3 matrix
-As a 4x4 matrix
-As a SITransformation object
-As a SIVector3 object
*/
var oSIRotation = XSIMath.CreateRotation(
XSIMath.DegreesToRadians( 45 ),
XSIMath.DegreesToRadians( 30 ),
XSIMath.DegreesToRadians( 15 ) ) ;
oSIMatrix3 = XSIMath.CreateMatrix3() ;
oSIRotation.GetMatrix3( oSIMatrix3 ) ;
oSIMatrix4 = ConvertMatrix3ToMatrix4( oSIMatrix3 ) ;
oSITransformation = XSIMath.CreateTransform() ;
oSITransformation.SetMatrix4( oSIMatrix4 ) ;
var oSIVector3 = XSIMath.CreateVector3() ;
oSITransformation.GetRotationXYZAngles( oSIVector3 ) ;
// Prove that we haven't lost the original rotation values
Application.LogMessage( "Rotation " +
XSIMath.RadiansToDegrees( oSIVector3.X ) + ", " +
XSIMath.RadiansToDegrees( oSIVector3.Y ) + ", " +
XSIMath.RadiansToDegrees( oSIVector3.Z ) ) ;
// Output (notice very small rounding problems that occur
// when dealing with pi and trig functions):
//INFO : Rotation 45, 29.999999999999996, 14.999999999999998
function ConvertMatrix3ToMatrix4( oM3 )
{
// Helper function to convert 3x3 rotation matrix
// to equivalent 4x4 transformation matrix:
//
// r11 r12 r13 0
// r21 r22 r23 0
// r31 r32 r33 0
// 0 0 0 1
oSIMatrix4 = XSIMath.CreateMatrix4(
oM3(0,0), oM3(0,1), oM3(0,2), 0,
oM3(1,0), oM3(1,1), oM3(1,2), 0,
oM3(2,0), oM3(2,1), oM3(2,2), 0,
0, 0, 0, 1 ) ;
return oSIMatrix4 ;
}
|