Hauptseite | Klassenhierarchie | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente | Datei-Elemente | Zusätzliche Informationen

MATRIX.H

gehe zur Dokumentation dieser Datei
00001 // matrix.h - definiert die Matrix-, Vektor- und MatrizenListe-Klassen. 00002 // Dabei enthält das Array alle Elemente der Matrix. Das wird erreicht, indem 00003 // die Zeilen der Matrix hindereinander gespeichert werden, d.h. Zeile 1, 00004 // Zeile 2, ..., Zeile n. 00005 00006 #ifndef __MATRIX_H 00007 #define __MATRIX_H 00008 00009 #include "utils\u_utils.h" 00010 00011 // Konstanten fuer Reihenfolge der Transformationen 00012 const unsigned REIHENFOLGE_XYZ= 10; 00013 const unsigned REIHENFOLGE_ZYX= 13; 00014 00015 class TVektor; 00016 00017 //****************************************************************************** 00018 // Klasse Matrix 00019 // ------------- 00020 // mit m Zeilen und n Spalten 00021 // es besteht die Möglichkeit, die Matrizen in homogener Schreibweise 00022 // anzugeben (durch zusätzliche homogene Komponente) 00023 // in diesem Fall wird die Membervariable homogene_koordinaten=true gesetzt 00024 //****************************************************************************** 00025 class TMatrix 00026 { 00027 friend TVektor; 00028 00029 protected: 00030 // Membervariablen zur Darstellung der Matrix 00031 double *arr; // eindimensionales Feld zur Speicherung der Matrixelemente 00032 unsigned ze; // Zeilen 00033 unsigned sp; // Spalten 00034 // Flag, das angibt, ob Matrix in homogener Schreibweise dargestellt ist 00035 bool homogene_koordinaten; 00036 00037 public: 00038 // Konstruktoren und Destruktor: 00039 TMatrix(); // Standardkonstruktor 00040 TMatrix(unsigned m, unsigned n); // initialisiert eine m*n-Nullmatrix 00041 TMatrix (const TMatrix & mat); // eigener Copy-Kontruktor 00042 virtual ~TMatrix(); // Klassendestruktor 00043 00044 // Klassenmethoden: 00045 // Test, ob Matrix bzw. Vektor in homogenen Koordinaten angegeben ist 00046 bool ist_homogen(void) const 00047 { 00048 return homogene_koordinaten; 00049 } 00050 00051 // überladene Operatoren : 00052 TMatrix operator= (const TMatrix & mat); // Matrizenzuweisung 00053 TMatrix operator + (const TMatrix & mat); // Matrizenaddition 00054 TMatrix operator - (const TMatrix & mat); // Matrizensubtraktion 00055 TMatrix operator * (const TMatrix & mat); // Matrizenmultiplikation 00056 TMatrix operator * (double & fakt); // reelle Vervielfachung für TMatrix*double 00057 friend TMatrix operator * (double fakt, const TMatrix & mat); // double*TMatrix 00058 00059 // Berechnung der Inversen einer Matrix, 00060 // sofern es sich um eine reguläre Matrix handelt 00061 TMatrix invers(void); 00062 00063 // Erstellung einer Einheitsmatrix mit Rang m 00064 TMatrix einheitsmatrix(unsigned m); 00065 00066 // **** Transformationsmethoden *************************** 00067 00068 // Verschiebe-(Translations)TMatrix erzeugen 00069 // Verschiebung um (Tx,Ty,Tz) Vektor 00070 TMatrix verschiebematrix(const TVektor & vekt); 00071 00072 // Rotationsmatrix erzeugen 00073 // Drehung um x-,y-, bzw. z-Achse mit Winkel 00074 // Anmerkung: wenn Winkel negativ angegeben, dann handelt es sich um eine 00075 // inverse Drehung 00076 TMatrix rotationsmatrix_x(double winkel); 00077 TMatrix rotationsmatrix_y(double winkel); 00078 TMatrix rotationsmatrix_z(double winkel); 00079 00080 // Zusammenfassung aller Transformationen in einer Funktion 00081 // Reihenfolge: REIHENFOLGE_XYZ= 10 00082 // REIHENFOLGE_ZYX= 13 00083 TMatrix transformiere(unsigned reihenfolge, const TVektor & verschiebung, 00084 double drehung_x, double drehung_y, double drehung_z); 00085 }; 00086 00087 00088 //****************************************************************************** 00089 // Klasse Vektor 00090 // ------------- 00091 // ist ein Spezialfall einer Matrizenklasse, bei dem gilt: 00092 // Spaltenanzahl (sp)= 1 00093 // es besteht die Möglichkeit, die Komponenten des Vektors 00094 // in homogenen Koordinaten anzugeben (durch zusätzliche homogene Komponente) 00095 // in diesem Fall wird die Membervariable homogene_koordinaten=true gesetzt 00096 //****************************************************************************** 00097 class TVektor : public TMatrix 00098 { 00099 00100 public: 00101 // Konstruktoren: 00102 00103 // Standardkonstruktor 00104 TVektor(void) : TMatrix() 00105 { 00106 sp= 1; 00107 } 00108 00109 // Konstruktor zur Initialisierung eines Vektors 00110 // mit m Zeilen in kartesischen Koordinaten 00111 TVektor(unsigned m) : TMatrix(m, 1) 00112 {} 00113 00114 // Konstruktor zur Initialisierung eines 3D-Vektors mit kartesischen Koordinaten 00115 TVektor(double x, double y, double z) : TMatrix(3, 1) 00116 { 00117 arr[0]= x; 00118 arr[1]= y; 00119 arr[2]= z; 00120 } 00121 00122 // Copy-Konstruktor, um aus einer (m,1)-Matrix einen Vektortyp zu machen 00123 TVektor (const TMatrix & mat); 00124 00125 // Klassenmethoden: 00126 00127 // Vektor skalieren 00128 friend TVektor operator * (double fakt, const TVektor & vekt); 00129 00130 // Matrix wird mit einem Vektor multipliziert und das Ergebnis ist ein Vektor 00131 // friend TVektor operator * (const TMatrix & mat, const TVektor & vekt); 00132 00133 // Umwandlung in einen Vektor mit homogenen Koordinaten 00134 TVektor mache_homogen(void); 00135 00136 // Umwandlung in einen Vektor mit kartesischen Koordinaten 00137 TVektor mache_kartesisch(void); 00138 00139 // Berechnung des Betrags (Länge) eines Vektors 00140 double vektor_betrag (void) const; 00141 00142 // Berechnung des Skalarproduktes zweier Vektoren 00143 double skalarprodukt (const TVektor & vekt); 00144 00145 // Berechnung des Winkels zwischen zwei Vektoren 00146 double winkel (const TVektor & vekt); 00147 00148 // Setzen der x,y,z-Koordinaten eines 3dim Vektors 00149 bool set_XYZ(double x, double y, double z); 00150 00151 // Ausgabe der x,y,z-Koordinaten eines 3dim Vektors 00152 bool get_XYZ(double & x, double & y, double & z); 00153 00154 }; 00155 00156 00157 //****************************************************************************** 00158 // Matrizenliste-Klasse 00159 // -------------------- 00160 // Liste von Transformationsmatrizen 00161 // organisiert als Stack 00162 // mit push(element), pop(), ist_leer() 00163 //****************************************************************************** 00164 class TMatrizenListe 00165 { 00166 private: 00167 // Membervariablen 00168 TMatrix *liste; // Liste als Zeiger auf die Matrizen 00169 unsigned akt_elemente; // aktuelle Anzahl von Matrixelements in der Liste 00170 unsigned max_elemente; // maximale Anzahl von abzuspeichernden Matrizen 00171 00172 public: 00173 // Konstruktoren und Destruktoren 00174 00175 // Listenkonstruktor um eine Liste mit einer bestimmten Anzahl von 00176 // Listenelementen zu erzeugen 00177 TMatrizenListe(unsigned anzahl= 10); 00178 00179 // Standarddestruktor 00180 virtual ~TMatrizenListe() 00181 { 00182 _FREELIST(liste); 00183 } 00184 00185 // Klassenmethoden: 00186 00187 // Test, ob Matrizenliste leer ist 00188 bool ist_leer(void) 00189 { 00190 return (akt_elemente == 0); 00191 } 00192 00193 // Gibt die Anzahl der Listenlemente zurück 00194 unsigned elementanzahl(void) 00195 { 00196 return akt_elemente; 00197 } 00198 00199 // Matrix zur Liste hinzufügen 00200 bool push(const TMatrix & trafo); 00201 00202 // letzte Matrix aus Liste entfernen 00203 // liefert entfernte Matrix zurück 00204 TMatrix pop(void); 00205 00206 // Listenelement mit Nummer position (1 .. akt_elemente) ausgeben(Direktzugriff) 00207 // liefert die Matrix an der Stelle position zurück 00208 TMatrix zeige(unsigned position); 00209 00210 }; 00211 00212 #endif 00213

Erzeugt am Sat Nov 13 12:48:06 2004 für XCTL32 von doxygen 1.3.7