OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
VcstMath.h
Go to the documentation of this file.
1 /*******************************************************************************
2  *
3  * NAME: VcstMath.h
4  *
5  * DESCRIPTION: This is the header file for the VcstMath object class.
6  *
7  * Adapted directly from the IDPS file ProCmnMath.h published
8  * by Raytheon Company.
9  *
10  *******************************************************************************/
11 
12 #ifndef VcstMath_h
13 #define VcstMath_h
14 
15 #include <math.h>
16 #include <VcstCmnConsts.h>
17 
22 class VcstMath {
23 public:
24 
32  static double calculateMag(const double aVector[VEC_SIZE]);
33 
41  static double calcQuatMag(const double aQuat[QUAT_SIZE]);
42 
52  static void calculateCross(const double aUvector[VEC_SIZE],
53  const double aVvector[VEC_SIZE], double anOutVector[VEC_SIZE]);
54 
63  static double calculateDot(const double aUvector[VEC_SIZE],
64  const double aVvector[VEC_SIZE]);
65 
74  static double calculateDotQuat(const double aUquat[QUAT_SIZE],
75  const double aVquat[QUAT_SIZE]);
76 
86  static void applyScalar(const double aScalar, double aVector[VEC_SIZE]);
87 
97  static void applyScalarQuat(const double aScalar, double aQuat[QUAT_SIZE]);
98 
115  static void conjugateQuat(const double aQuat[QUAT_SIZE],
116  double outQuat[QUAT_SIZE]);
117 
127  static void quatMultiply(const double q1[QUAT_SIZE],
128  const double q2[QUAT_SIZE], double outQuat[QUAT_SIZE]);
129 
140  static void quatMultiplyMatrix(const double q1[QUAT_SIZE],
141  const double q2[QUAT_SIZE], double outQuat[QUAT_SIZE]);
142 
152  static void matrixMultiply(const double aM1[VEC_SIZE][VEC_SIZE],
153  const double aM2[VEC_SIZE][VEC_SIZE],
154  double outMatrix[VEC_SIZE][VEC_SIZE]);
155 
168  static void matrixMultiply(const int dimM, const int dimN, const int dimP,
169  const double *aMByN, const double *aNByP, double *outMatrix);
170 
179  static void transposeMatrix(const double inMatrix[VEC_SIZE][VEC_SIZE],
180  double outMatrix[VEC_SIZE][VEC_SIZE]);
181 
193  static void transposeQuat(const double inQuat[QUAT_SIZE],
194  double outQuat[QUAT_SIZE]);
195 
204  static void printMatrixCOut(const double aMatrix[VEC_SIZE][VEC_SIZE]);
205 
214  static void printVectorCOut(const double aVector[VEC_SIZE]);
215 
224  static void printQuaternionCOut(const double aQuat[QUAT_SIZE]);
225 
234  static void matrixVectorProduct(const double aMatrix[VEC_SIZE][VEC_SIZE],
235  const double aVector[VEC_SIZE], double outVec[VEC_SIZE]);
236 
245  static void calculateUnitVector(const double aVector[VEC_SIZE],
246  double unitVector[VEC_SIZE]);
247 
257  static void normalizeQuat(double aQuat[QUAT_SIZE]);
258 
267  static void inverseMatrix(const double matA[VEC_SIZE][VEC_SIZE],
268  double matR[VEC_SIZE][VEC_SIZE]);
269 
280  static void rotationMatrix(const double angle, const short axis,
281  double outMatrix[VEC_SIZE][VEC_SIZE]);
282 
290  static double calculateDeterminant(const double matA[VEC_SIZE][VEC_SIZE]);
291 
300  static void cofactorMatrix(const double matA[VEC_SIZE][VEC_SIZE],
301  double cof[VEC_SIZE][VEC_SIZE]);
302 
303 };
304 
305 #endif
static void rotationMatrix(const double angle, const short axis, double outMatrix[VEC_SIZE][VEC_SIZE])
static double calculateMag(const double aVector[VEC_SIZE])
static void transposeQuat(const double inQuat[QUAT_SIZE], double outQuat[QUAT_SIZE])
static void cofactorMatrix(const double matA[VEC_SIZE][VEC_SIZE], double cof[VEC_SIZE][VEC_SIZE])
static void calculateCross(const double aUvector[VEC_SIZE], const double aVvector[VEC_SIZE], double anOutVector[VEC_SIZE])
static void normalizeQuat(double aQuat[QUAT_SIZE])
static void printVectorCOut(const double aVector[VEC_SIZE])
static void transposeMatrix(const double inMatrix[VEC_SIZE][VEC_SIZE], double outMatrix[VEC_SIZE][VEC_SIZE])
static double calculateDot(const double aUvector[VEC_SIZE], const double aVvector[VEC_SIZE])
static void conjugateQuat(const double aQuat[QUAT_SIZE], double outQuat[QUAT_SIZE])
static double calculateDeterminant(const double matA[VEC_SIZE][VEC_SIZE])
static void quatMultiplyMatrix(const double q1[QUAT_SIZE], const double q2[QUAT_SIZE], double outQuat[QUAT_SIZE])
static void matrixVectorProduct(const double aMatrix[VEC_SIZE][VEC_SIZE], const double aVector[VEC_SIZE], double outVec[VEC_SIZE])
const int VEC_SIZE
static void printMatrixCOut(const double aMatrix[VEC_SIZE][VEC_SIZE])
const int QUAT_SIZE
static void applyScalar(const double aScalar, double aVector[VEC_SIZE])
static void printQuaternionCOut(const double aQuat[QUAT_SIZE])
static double calculateDotQuat(const double aUquat[QUAT_SIZE], const double aVquat[QUAT_SIZE])
static double calcQuatMag(const double aQuat[QUAT_SIZE])
static void quatMultiply(const double q1[QUAT_SIZE], const double q2[QUAT_SIZE], double outQuat[QUAT_SIZE])
static void inverseMatrix(const double matA[VEC_SIZE][VEC_SIZE], double matR[VEC_SIZE][VEC_SIZE])
static void calculateUnitVector(const double aVector[VEC_SIZE], double unitVector[VEC_SIZE])
static void applyScalarQuat(const double aScalar, double aQuat[QUAT_SIZE])
static void matrixMultiply(const double aM1[VEC_SIZE][VEC_SIZE], const double aM2[VEC_SIZE][VEC_SIZE], double outMatrix[VEC_SIZE][VEC_SIZE])