[80]  1  /**********************************************************************


 2  *<


 3  FILE: matrix33.h


 4 


 5  DESCRIPTION: Class definitions for Matrix33


 6 


 7  CREATED BY: Dan Silva


 8 


 9  HISTORY:


 10 


 11  *> Copyright (c) 1994, All Rights Reserved.


 12  **********************************************************************/


 13  #ifndef _MATRIX33_H


 14 


 15  #define _MATRIX33_H


 16 


 17  #include "point3.h"


 18 


 19  class Matrix33 {


 20  public:


 21  float m[4][3];


 22 


 23  // Constructors


 24  Matrix33(){} // NO INITIALIZATION done in this constructor!!


 25  // (can use IdentityMatrix)


 26  DllExport Matrix33(float (*fp)[3]);


 27 


 28  // Assignment operators


 29  DllExport Matrix33& operator=( const Matrix33& M);


 30  DllExport Matrix33& operator+=( const Matrix33& M);


 31  DllExport Matrix33& operator*=( const Matrix33& M); // Matrix multiplication


 32 


 33  // Conversion function


 34  operator float*() { return(&m[0][0]); }


 35 


 36  // Operations on matrix


 37  DllExport void IdentityMatrix(); // Make into the Identity Matrix


 38  DllExport void Zero(); // set all elements to 0


 39 


 40  // null out the rotation part;


 41  DllExport void NoRot();


 42  // null out the scale part;


 43  DllExport void NoScale();


 44 


 45  // Access ith row as Point3 for read or assignment:


 46  Point3& operator[](int i) { return((Point3&)(*m[i])); }


 47  Point3& operator[](int i) const { return((Point3&)(*m[i])); }


 48 


 49  // Apply Incremental transformations to this matrix


 50  DllExport void RotateX(float angle);


 51  DllExport void RotateY(float angle);


 52  DllExport void RotateZ(float angle);


 53  DllExport void Scale(const Point3& s);


 54 


 55  DllExport Matrix33 operator*(const Matrix33&) const;


 56  DllExport Matrix33 operator+(const Matrix33&) const;


 57  DllExport Matrix33 operator(const Matrix33&) const;


 58 


 59  };


 60 


 61 


 62  // Build new matrices for transformations


 63 


 64  Matrix33 DllExport Inverse(const Matrix33& M); // return Inverse of matrix


 65 


 66  // These two versions of transforming a point with a matrix do the same thing,


 67  // regardless of the order of operands (linear algebra rules notwithstanding).


 68  Point3 DllExport operator*(const Matrix33& A, const Point3& V); // Transform Point with matrix


 69  Point3 DllExport operator*(const Point3& V, const Matrix33& A); // Transform Point with matrix


 70 


 71  ostream DllExport &operator<< (ostream& s, const Matrix33& A);


 72 


 73  #endif // define _MATRIX33_H

