VR-Link API Documentation for DIS
vlDcm.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *********************************************************************/
00005 
00006 
00007 #ifndef vlDcm_H_
00008 #define vlDcm_H_
00009 
00010 #include "vlVector.h"
00011 #include "directRotRate.h"
00012 
00016 
00017 
00018 #ifdef DtUSE_UTILITIES_NAMESPACE
00019 namespace DtUSE_UTILITIES_NAMESPACE
00020 {
00021 #endif
00022 
00023 class DtQuaternion;
00024 class DtTaitBryan;
00025 class DT_DLL_MATRIX DtDcm;
00026 
00027 
00029 typedef DtVector DtBodyRates;
00030 
00039 class DT_DLL_MATRIX DtDcm
00040 {
00041   public:
00042 
00044     DtDcm();
00045 
00047     DtDcm(double a, double b, double c, 
00048      double d, double e, double f, 
00049      double g, double h, double i); 
00050 
00052     DtDcm(const DtVector& a, const DtVector& b, const DtVector& c);
00053 
00055     DtDcm(const DtDcm &other);
00056 
00058     DtDcm(const DtQuaternion &quat);
00059 
00061     DtDcm(const DtTaitBryan &tb);
00062 
00064     DtDcm &operator=(const DtDcm &other);
00065    
00068     int operator==(const DtDcm& other) const;
00069 
00072     int operator!=(const DtDcm& other) const;
00073 
00075     bool isOrthonormal() const;
00076 
00078     operator DtVector* ();
00079     operator const DtVector* () const;
00080 
00082     DtVector &operator[](int i);
00083     const DtVector &operator[](int i) const;
00084 
00086     void print() const;
00087 
00089     void setToZero();
00090 
00091 public:
00092    static const DtDcm& zero();
00093    static const DtDcm& identity();
00094 
00095 protected:
00096     DtVector rep[3];
00097 };
00098 
00102 
00103 DT_DLL_MATRIX void      DtDcmDcmRotAxis(const DtDcm& a2ref, const DtDcm& b2ref, DtVector& n /* a2b */);
00104 DT_DLL_MATRIX void      DtDcmIdentInit(DtDcm& m);
00105 
00106 
00108 DT_DLL_MATRIX void      DtDcmFixMatrix(DtDcm& mat, int axis);
00109 
00110 DT_DLL_MATRIX double    DtDcmDeterminant(const DtDcm& m);
00111 DT_DLL_MATRIX void      DtDcmAdd(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 + m2 */
00112 DT_DLL_MATRIX void      DtDcmSub(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 - m2 */
00113 DT_DLL_MATRIX void      DtDcmDcmMul(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 x m2 */
00114 DT_DLL_MATRIX void      DtDcmTranspose(const DtDcm& m, DtDcm& result);
00115 DT_DLL_MATRIX void      DtDcmAdjugate(const DtDcm& m, DtDcm& result);
00116 DT_DLL_MATRIX void      DtDcmInverse(const DtDcm& m, DtDcm& result);
00117 DT_DLL_MATRIX double    DtDcmDcmRotAngle(const DtDcm& a, const DtDcm& b);
00118 
00120 #define ZERO 0
00121 #define IDENTITY 1;
00122 DT_DLL_MATRIX void DtM_Init(const DtDcm& input,DtDcm& result,int flag);
00123 DT_DLL_MATRIX void DtSetSym(DtDcm& v,double aa,double ab,double ac,double bb,double bc,double cc);
00124 
00125 DT_DLL_MATRIX void DtCreateCross(const DtVector& r,DtDcm& ans);
00126 DT_DLL_MATRIX void DtM(const DtVector& v,DtDcm& m);
00127 DT_DLL_MATRIX void DtRotate(DtDcm& ans,const DtVector& direction,double theta);
00128 
00129 
00131 DT_DLL_MATRIX void      DtDcmScale(const DtDcm& mat, double scale_factor, DtDcm& result);
00132 DT_DLL_MATRIX void      DtDcmVecMul(const DtDcm& m, const DtVector& v, DtVector& result);
00133 
00136 DT_DLL_MATRIX void      DtDcmRotInit(DtDcm& m, double theta, int rot_axis);
00137 
00141 DT_DLL_MATRIX void      DtDcmRotInit2(DtDcm& m, double sin_theta, int rot_axis);
00142 
00146 DT_DLL_MATRIX void      DtDcmTrigInit(DtDcm& m, double sin_theta,
00147                                       double cos_theta, int rot_axis);
00148 
00151 DT_DLL_MATRIX void      DtDcmForm(const double *axis, double angle,
00152                                   DtDcm& c, double *sin_ang, double *cos_ang);
00153 
00155 DT_DLL_MATRIX void   DtTbToMat(const DtTaitBryan &tb, DtDcm& HcW);
00156 
00161 DT_DLL_MATRIX void      DtDcmLevelInit (DtDcm& m, const DtVector& v);
00162 
00170 DT_DLL_MATRIX void   DtBodyToMat(DtBodyRates av, const DtDcm& HcW, DtDcm& cDot);
00171 
00173 
00174 DT_DLL_MATRIX DtDirectedRotRate DtDirectRotRate(const DtVector& pqr);
00175 DT_DLL_MATRIX void DtMakeRotationDcm(const DtDirectedRotRate& drr, double dt, DtDcm& m);
00176 
00182 DT_DLL_MATRIX double DtDcmDcmRotTrace(const DtDcm& a, const DtDcm& b);
00183 
00185 enum generic_mm_multflag
00186 {
00187    TRANSPOSE_NONE = 0,
00188    TRANSPOSE_M1 = 1,
00189    TRANSPOSE_M2 = 2,
00190    TRANSPOSE_M1_AND_M2 = 3
00191 };
00192 
00193 DT_DLL_MATRIX double DtMM_Mult( const DtDcm& m1, const DtDcm& m2, DtDcm& result,
00194                                 generic_mm_multflag flag=TRANSPOSE_NONE);
00195 
00196 
00198 DT_DLL_MATRIX void      DtDcmDump(const char *str, const DtDcm& mat);
00199 
00201 DT_DLL_MATRIX void      DtDcmFromQuaternion(DtDcm& m,const DtQuaternion *q);
00202 
00204 DT_DLL_MATRIX int       DtDcmCheck(const DtDcm& m);
00205 
00207 DT_DLL_MATRIX void      DtDcmCopy(const DtDcm& src, DtDcm& dest);
00208 
00210 DT_DLL_MATRIX void      DtDcmInit(DtDcm& m);  
00211 
00213 typedef const DtDcm &DtConstDcm;
00214 
00216 typedef DtDcm &DtDcmRef;
00217 
00218 
00220 #define vlDcm_inl
00221 #include "vlDcm.inl"
00222 #undef vlDcm_inl
00223 
00224 #ifdef DtUSE_UTILITIES_NAMESPACE
00225 }
00226 #endif
00227 
00228 
00229 #endif
00230 
00231 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)