[AE Engine logo] Public API Reference
Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

matrix3.h

00001 /*
00002  *  AE Engine
00003  *
00004  *  Copyright (C) 2003 Riku "Rakkis" Nurminen
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  *
00020  */
00021 
00022 #ifndef __AELIB_AEGEOM_MATRIX3_H__
00023 #define __AELIB_AEGEOM_MATRIX3_H__
00024 
00025 #include <aegeom/vector3.h>
00026 
00030 class aeMatrix3 {
00031  public:
00035         inline aeMatrix3() {}
00036 
00050         inline aeMatrix3(float nm11, float nm12, float nm13,
00051                                          float nm21, float nm22, float nm23,
00052                                          float nm31, float nm32, float nm33) :
00053                 m11(nm11), m12(nm12), m13(nm13),
00054                 m21(nm21), m22(nm22), m23(nm23),
00055                 m41(nm31), m42(nm32), m43(nm33) {}
00056 
00062         inline aeMatrix3(const aeMatrix3 &m) :
00063                 m11(m.m11), m12(m.m12), m13(m.m13),
00064                 m21(m.m21), m22(m.m22), m23(m.m23),
00065                 m31(m.m31), m32(m.m32), m33(m.m33) {}
00066 
00072         inline aeMatrix3(const aeMatrix4 &m) :
00073                 m11(m.m11), m12(m.m12), m13(m.m13),
00074                 m21(m.m21), m22(m.m22), m23(m.m23),
00075                 m31(m.m31), m32(m.m32), m33(m.m33) {}
00076 
00077         inline ~aeMatrix3() {}
00078 
00080         float m11;
00082         float m12;
00084         float m13;
00086         float m21;
00088         float m22;
00090         float m23;
00092         float m31;
00094         float m32;
00096         float m33;
00097 
00105         aeMatrix3 & operator+=(const aeMatrix3 &m);
00106 
00114         aeMatrix3 & operator-=(const aeMatrix3 &m);
00115 
00123         aeMatrix3 & operator*=(const aeMatrix3 &m);
00124 
00132         aeMatrix3 & operator*=(float s);
00133 
00141         aeMatrix3 & operator/=(float s);
00142 
00148         inline aeMatrix3 operator+() const { return *this; }
00149 
00155         inline aeMatrix3 operator-() const {
00156                 return aeMatrix3(-m11, -m12, -m13,
00157                                                  -m21, -m22, -m23,
00158                                                  -m31, -m32, -m33);
00159         }
00160 
00169         friend aeMatrix3 operator+(const aeMatrix3 &m1, const aeMatrix3 &m2);
00170 
00179         friend aeMatrix3 operator-(const aeMatrix3 &m1, const aeMatrix3 &m2);
00180 
00189         friend aeMatrix3 operator*(const aeMatrix3 &m1, const aeMatrix3 &m2);
00190 
00199         inline friend aeVector3 operator*(const aeMatrix3 &m, const aeVector3 &v) {
00200                 return aeVector3(m.m11 * v.x + m.m12 * v.y + m.m13 * v.z,
00201                                                  m.m21 * v.x + m.m22 * v.y + m.m23 * v.z,
00202                                                  m.m31 * v.x + m.m32 * v.y + m.m33 * v.z);
00203         }
00204 
00213         friend aeMatrix3 operator*(const aeMatrix3 &m, float f);
00214 
00223         friend aeMatrix3 operator*(float f, const aeMatrix3 &m);
00224 
00233         friend aeMatrix3 operator/(const aeMatrix3 &m, float f);
00234 
00243         friend bool operator==(const aeMatrix3 &m1, const aeMatrix3 &m2);
00244 
00253         friend bool operator!=(const aeMatrix3 &m1, const aeMatrix3 &m2);
00254 
00260         inline aeVector3 getFirstRow() const { return aeVector3(m11, m12, m13); }
00261 
00267         inline aeVector3 getSecondRow() const { return aeVector3(m21, m22, m23); }
00268 
00274         inline aeVector3 getThirdRow() const { return aeVector3(m31, m32, m33); }
00275 
00281         inline aeVector3 getFirstColumn() const { return aeVector3(m11, m21, m31); }
00282 
00288         inline aeVector3 getSecondColumn() const { return aeVector3(m12, m22, m32); }
00289 
00295         inline aeVector3 getThirdColumn() const { return aeVector3(m13, m23, m33); }
00296 
00317         inline void set(float nm11, float nm12, float nm13,
00318                                         float nm21, float nm22, float nm23,
00319                                         float nm31, float nm32, float nm33) {
00320                 m11 = nm11; m12 = nm12; m13 = nm13;
00321                 m21 = nm21; m22 = nm22; m23 = nm23;
00322                 m31 = nm31; m32 = nm32; m33 = nm33;
00323         }
00324 
00330         inline void set(const aeMatrix3 &m) {
00331                 m11 = m.m11; m12 = m.m12; m13 = m.m13;
00332                 m21 = m.m21; m22 = m.m22; m23 = m.m23;
00333                 m31 = m.m31; m32 = m.m32; m33 = m.m33;
00334         }
00335 
00341         inline void set(const aeMatrix4 &m) {
00342                 m11 = m.m11; m12 = m.m12; m13 = m.m13;
00343                 m21 = m.m21; m22 = m.m22; m23 = m.m23;
00344                 m31 = m.m31; m32 = m.m32; m33 = m.m33;
00345         }
00346 
00351         void setToIdentity();
00352 
00358         bool isIdentity() const;
00359 
00363         void transpose();
00364 
00370         aeMatrix3 getTranspose() const;
00371 };
00372 
00373 #endif // __AELIB_AEENGINE_MATRIX3_H__

AE Engine Public API Reference
Generated on Wed Apr 9 09:43:39 2003 by Doxygen.