xsi_math.h
Go to the documentation of this file.
00001 //*****************************************************************************
00011 //*****************************************************************************
00012 
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016 
00017 #ifndef __XSIMATH_H__
00018 #define __XSIMATH_H__
00019 
00020 #include "sicppsdk.h"
00021 #include "xsi_vector3.h"
00022 #include "xsi_vector4.h"
00023 #include "xsi_matrix3.h"
00024 #include "xsi_matrix4.h"
00025 #include "xsi_transformation.h"
00026 #include "xsi_quaternion.h"
00027 #include "xsi_rotation.h"
00028 
00029 namespace XSI {
00030 
00050 namespace MATH {
00051 
00052     class CMatrix3f;
00053     class CVector3f;
00054     class CQuaternionf;
00055 
00071     static const double PI(3.14159265358979323846);
00072 
00078     static const float PI2((float)PI*2.0f);
00079 
00085     static const float Invert2PI(0.5f/(float)PI);
00086 
00092     static const float MilliEPS(1.0e-03f);
00093 
00099     static const float MicroEPS(1.0e-06f);
00100 
00106     static const float NanoEPS(1.0e-09f);
00107 
00113     static const float PicoEPS(1.0e-012f);
00114 
00119     inline double DegreesToRadians (double in_dDegrees)
00120     { return (in_dDegrees * (PI/180.0));}
00121 
00126     inline double RadiansToDegrees (double in_dRadians)
00127     { return (in_dRadians * (180.0/PI));}
00128 
00184     SICPPSDKDECL CTransformation MapObjectPoseToWorldSpace
00185     (
00186         const CTransformation&  in_transfoObjectSpace,
00187         const CTransformation&  in_transfoPose
00188     );
00189 
00190 
00233     SICPPSDKDECL CVector3 MapObjectOrientationToWorldSpace
00234     (
00235         const CTransformation&  in_transfoObjectSpace,
00236         const CVector3&             in_vector3Orientation
00237     );
00238 
00239 
00280     SICPPSDKDECL CVector3 MapObjectPositionToWorldSpace
00281     (
00282         const CTransformation&  in_transfoObjectSpace,
00283         const CVector3&         in_vector3Position
00284     );
00285 
00291     SICPPSDKDECL CTransformation MapWorldPoseToObjectSpace
00292     (
00293         const CTransformation&  in_transfoObjectSpace,
00294         const CTransformation&  in_transfoPose
00295     );
00296 
00302     SICPPSDKDECL CVector3 MapWorldOrientationToObjectSpace
00303     (
00304         const CTransformation&  in_transfoObjectSpace,
00305         const CVector3&         in_vector3Orientation
00306     );
00307 
00343     SICPPSDKDECL CVector3 MapWorldPositionToObjectSpace
00344     (
00345         const CTransformation&  in_transfoObjectSpace,
00346         const CVector3&         in_vector3Position
00347     );
00348 
00412     SICPPSDKDECL CTransformation MapObjectPoseToObjectSpace
00413     (
00414         const CTransformation&  in_transfoObjectSpace,
00415         const CTransformation&  in_transfoSpace,
00416         const CTransformation&  in_transfoPose
00417     );
00418 
00479     SICPPSDKDECL CVector3 MapObjectOrientationToObjectSpace
00480     (
00481         const CTransformation&  in_transfoObjectSpace,
00482         const CTransformation&  in_transfoSpace,
00483         const CVector3&         in_vector3Orientation
00484     );
00485 
00486 
00565     SICPPSDKDECL CVector3 MapObjectPositionToObjectSpace
00566     (
00567         const CTransformation&  in_transfoObjectSpace,
00568         const CTransformation&  in_transfoSpace,
00569         const CVector3&         in_vector3Position
00570     );
00571 
00572     SICPPSDK_INLINE void LimitValue( float& io_fVal, float in_fMin, float in_fMax );
00573     SICPPSDKDECL void MatToEuler( const CMatrix3f& in_mat, CVector3f& io_vct, const short in_order );
00574     SICPPSDKDECL void EulerToMat( const CVector3f& in_vct, CMatrix3f& out_mat, const short in_order );
00575     SICPPSDKDECL void EulerToQuat( const CVector3f& in_vct, CQuaternionf& out_quat, const short in_order);
00576 };
00577 
00578 };
00579 
00580 SICPPSDK_INLINE void XSI::MATH::LimitValue( float& io_fVal, float in_fMin, float in_fMax )
00581 {
00582    if( io_fVal < in_fMin )
00583       io_fVal = in_fMin;
00584    else if( io_fVal > in_fMax )
00585       io_fVal = in_fMax;
00586 }
00587 
00588 #endif // __XSIMATH_H__