VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vlDcm.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2010 MAK Technologies, Inc
3 ** All rights reserved.
4 *********************************************************************/
5 
6 
7 #ifndef vlDcm_H_
8 #define vlDcm_H_
9 
10 #include "vlVector.h"
11 #include "directedRotRate.h"
12 
16 
17 
18 #ifdef DtUSE_UTILITIES_NAMESPACE
19 namespace DtUSE_UTILITIES_NAMESPACE
20 {
21 #endif
22 
23 class DtQuaternion;
24 class DtTaitBryan;
26 
27 
29 typedef DtVector32 DtBodyRates;
30 
40 {
41  public:
42 
44  DtDcm();
45 
47  DtDcm(double a, double b, double c,
48  double d, double e, double f,
49  double g, double h, double i);
50 
52  DtDcm(const DtVector& a, const DtVector& b, const DtVector& c);
53 
55  DtDcm(const DtDcm &other);
56 
58  DtDcm(const DtQuaternion &quat);
59 
61  DtDcm(const DtTaitBryan &tb);
62 
64  DtDcm &operator=(const DtDcm &other);
65 
68  int operator==(const DtDcm& other) const;
69 
72  int operator!=(const DtDcm& other) const;
73 
75  bool isOrthonormal() const;
76 
78  operator DtVector* ();
79  operator const DtVector* () const;
80 
82  DtVector &operator[](int i);
83  const DtVector &operator[](int i) const;
84 
86  void print() const;
87 
89  void setToZero();
90 
91 public:
92  static const DtDcm& zero();
93  static const DtDcm& identity();
94 
95 protected:
96  DtVector rep[3];
97 };
98 
102 
103 DT_DLL_MATRIX void DtDcmDcmRotAxis(const DtDcm& a2ref, const DtDcm& b2ref, DtVector& n /* a2b */);
104 DT_DLL_MATRIX void DtDcmDcmRotAxis(const DtDcm& a2ref, const DtDcm& b2ref, DtVector32& n /* a2b */);
106 
107 
109 DT_DLL_MATRIX void DtDcmFixMatrix(DtDcm& mat, int axis);
110 
111 DT_DLL_MATRIX double DtDcmDeterminant(const DtDcm& m);
112 DT_DLL_MATRIX void DtDcmAdd(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 + m2 */
113 DT_DLL_MATRIX void DtDcmSub(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 - m2 */
114 DT_DLL_MATRIX void DtDcmDcmMul(const DtDcm& m1, const DtDcm& m2, DtDcm& result); /* result = m1 x m2 */
115 DT_DLL_MATRIX void DtDcmTranspose(const DtDcm& m, DtDcm& result);
116 DT_DLL_MATRIX void DtDcmAdjugate(const DtDcm& m, DtDcm& result);
117 DT_DLL_MATRIX void DtDcmInverse(const DtDcm& m, DtDcm& result);
118 DT_DLL_MATRIX double DtDcmDcmRotAngle(const DtDcm& a, const DtDcm& b, double precision=1e-12);
119 
121 DT_DLL_MATRIX void DtM_Init(const DtDcm& input,DtDcm& result,int flag);
122 DT_DLL_MATRIX void DtSetSym(DtDcm& v,double aa,double ab,double ac,double bb,double bc,double cc);
123 
124 DT_DLL_MATRIX void DtCreateCross(const DtVector& r,DtDcm& ans);
125 DT_DLL_MATRIX void DtCreateCross(const DtVector32& r,DtDcm& ans);
126 DT_DLL_MATRIX void DtM(const DtVector& v,DtDcm& m);
127 DT_DLL_MATRIX void DtM(const DtVector32& v,DtDcm& m);
128 DT_DLL_MATRIX void DtRotate(DtDcm& ans,const DtVector& direction,double theta);
129 DT_DLL_MATRIX void DtRotate(DtDcm& ans,const DtVector32& direction,double theta);
130 
131 
133 DT_DLL_MATRIX void DtDcmScale(const DtDcm& mat, double scale_factor, DtDcm& result);
134 DT_DLL_MATRIX void DtDcmVecMul(const DtDcm& m, const DtVector& v, DtVector& result);
135 DT_DLL_MATRIX void DtDcmVecMul(const DtDcm& m, const DtVector32& v, DtVector32& result);
136 
139 DT_DLL_MATRIX void DtDcmRotInit(DtDcm& m, double theta, int rot_axis);
140 
144 DT_DLL_MATRIX void DtDcmRotInit2(DtDcm& m, double sin_theta, int rot_axis);
145 
149 DT_DLL_MATRIX void DtDcmTrigInit(DtDcm& m, double sin_theta,
150  double cos_theta, int rot_axis);
151 
154 DT_DLL_MATRIX void DtDcmForm(const double *axis, double angle,
155  DtDcm& c, double *sin_ang, double *cos_ang);
156 
158 DT_DLL_MATRIX void DtTbToMat(const DtTaitBryan &tb, DtDcm& HcW);
159 
164 DT_DLL_MATRIX void DtDcmLevelInit (DtDcm& m, const DtVector& v);
165 DT_DLL_MATRIX void DtDcmLevelInit (DtDcm& m, const DtVector32& v);
166 
174 DT_DLL_MATRIX void DtBodyToMat(DtBodyRates av, const DtDcm& HcW, DtDcm& cDot);
175 
177 
180 DT_DLL_MATRIX void DtMakeRotationDcm(const DtDirectedRotRate& drr, double dt, DtDcm& m);
181 
187 DT_DLL_MATRIX double DtDcmDcmRotTrace(const DtDcm& a, const DtDcm& b);
188 
191 {
196 };
197 
198 DT_DLL_MATRIX double DtMM_Mult( const DtDcm& m1, const DtDcm& m2, DtDcm& result,
200 
201 
203 DT_DLL_MATRIX void DtDcmDump(const char *str, const DtDcm& mat);
204 
207 
209 DT_DLL_MATRIX int DtDcmCheck(const DtDcm& m);
210 
212 DT_DLL_MATRIX void DtDcmCopy(const DtDcm& src, DtDcm& dest);
213 
215 DT_DLL_MATRIX void DtDcmInit(DtDcm& m);
216 
218 typedef const DtDcm &DtConstDcm;
219 
221 typedef DtDcm &DtDcmRef;
222 
223 
225 #define vlDcm_inl
226 #include "vlDcm.inl"
227 #undef vlDcm_inl
228 
229 #ifdef DtUSE_UTILITIES_NAMESPACE
230 }
231 #endif
232 
233 
234 #endif
235 
236 
void DtDcmVecMul(const DtDcm &m, const DtVector &v, DtVector &result)
void DtDcmFixMatrix(DtDcm &mat, int axis)
make orthonormal, pick most important. axis
void DtTbToMat(const DtTaitBryan &tb, DtDcm &HcW)
Convert a TaitBryan to a DtDcm.
void DtM(const DtVector &v, DtDcm &m)
const bool operator==(const DtU128 &lhs, const DtU128 &rhs)
const DtDcm & DtConstDcm
This typedef is deprecated, please do not use.
Definition: vlDcm.h:218
void DtMakeRotationDcm(const DtDirectedRotRate &drr, double dt, DtDcm &m)
void DtDcmCopy(const DtDcm &src, DtDcm &dest)
This method is deprecated, please use the copy ctor, or assignment operator for DtDcm.
Definition: vlDcm.h:192
void DtDcmRotInit2(DtDcm &m, double sin_theta, int rot_axis)
Initializes a DtDcm to be a rotation DtDcm.
double DtDcmDcmRotAngle(const DtDcm &a, const DtDcm &b, double precision=1e-12)
double DtDcmDeterminant(const DtDcm &m)
DtDirectedRotRate DtDirectRotRate(const DtVector &pqr)
Directed rotation rates.
Definition: vlDcm.h:193
DtDcm & DtDcmRef
This typedef is deprecated, please do not use.
Definition: vlDcm.h:221
double DtMM_Mult(const DtDcm &m1, const DtDcm &m2, DtDcm &result, generic_mm_multflag flag=TRANSPOSE_NONE)
void DtDcmIdentInit(DtDcm &m)
DtTaitBryans are used to represent orientation of an object, using a set of three Euler angles...
Definition: vlTaitBryan.h:43
DtVector32 DtBodyRates
Angular rotation about body X, Y, Z axes.
Definition: vlDcm.h:25
This file declares DtDirectedRotRate.
void DtDcmTrigInit(DtDcm &m, double sin_theta, double cos_theta, int rot_axis)
Initializes a DtDcm to be a rotation DtDcm.
void DtBodyToMat(DtBodyRates av, const DtDcm &HcW, DtDcm &cDot)
Convert Body Rates to DCM.
Definition: vlDcm.h:195
Rotation rate given by single rate and axis of rotation.
Definition: directedRotRate.h:23
void DtDcmFromQuaternion(DtDcm &m, const DtQuaternion *q)
This function is deprecated, please use DtDcm::(const DtQuaternion&q) instead.
void DtDcmTranspose(const DtDcm &m, DtDcm &result)
This file declares DtVector and DtVector32.
double DtDcmDcmRotTrace(const DtDcm &a, const DtDcm &b)
Returns the trace of the rotation DtDcm, R, between between matrices A and B.
void DtDcmDump(const char *str, const DtDcm &mat)
This function is deprecated, please use DtDcm.print()
void DtDcmInverse(const DtDcm &m, DtDcm &result)
void DtDcmInit(DtDcm &m)
This method is deprecated, please use dcm.setToZero()
Definition: vlVector.h:224
void DtDcmDcmRotAxis(const DtDcm &a2ref, const DtDcm &b2ref, DtVector &n)
Direction Cosine Matrix routines.
Definition: vlVector.h:162
#define DT_DLL_MATRIX
Definition: vlMachineTypes.h:107
Quaternions are used to represent orientation of an object.
Definition: vlQuaternion.h:30
void DtDcmSub(const DtDcm &m1, const DtDcm &m2, DtDcm &result)
DtDcms are used to represent orientation for an object.
Definition: vlDcm.h:39
int DtDcmCheck(const DtDcm &m)
This method is deprecated, please use DtDcm::isOrthonormal.
Definition: vlDcm.h:194
void DtDcmScale(const DtDcm &mat, double scale_factor, DtDcm &result)
Scales a DtDcm.
const bool operator!=(const DtU128 &lhs, const DtU128 &rhs)
void DtDcmForm(const double *axis, double angle, DtDcm &c, double *sin_ang, double *cos_ang)
void DtM_Init(const DtDcm &input, DtDcm &result, int flag)
Generic initialize matrix routines.
void DtDcmAdjugate(const DtDcm &m, DtDcm &result)
void DtDcmRotInit(DtDcm &m, double theta, int rot_axis)
Initialize a DtDcm to be a rotation DtDcm.
void DtRotate(DtDcm &ans, const DtVector &direction, double theta)
void DtDcmLevelInit(DtDcm &m, const DtVector &v)
Takes a normalized vector and forms a DtDcm which will transform from a coordinate system whose Y axi...
void DtDcmDcmMul(const DtDcm &m1, const DtDcm &m2, DtDcm &result)
void DtSetSym(DtDcm &v, double aa, double ab, double ac, double bb, double bc, double cc)
void DtCreateCross(const DtVector &r, DtDcm &ans)
generic_mm_multflag
Generic DcmDcm Multiply routine.
Definition: vlDcm.h:190
void DtDcmAdd(const DtDcm &m1, const DtDcm &m2, DtDcm &result)

Document ID: Generated on Wed Mar 27 02:04:30 EDT 2024 from SVN revision 264570
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)