The Gnome Chemistry Utils 0.13.3
|
00001 // -*- C++ -*- 00002 00003 /* 00004 * Gnome Chemistry Utils 00005 * matrix.h 00006 * 00007 * Copyright (C) 2000-2010 Jean Bréfort <jean.brefort@normalesup.org> 00008 * 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU General Public License as 00011 * published by the Free Software Foundation; either version 2 of the 00012 * License, or (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00022 * USA 00023 */ 00024 00025 #ifndef GCU_MATRIX_H 00026 #define GCU_MATRIX_H 00027 00029 namespace gcu 00030 { 00031 00032 class Vector; 00033 00044 enum MatrixType {euler, antieuler, rotation}; 00045 00049 class Matrix 00050 { 00051 public: 00052 00056 Matrix (); 00062 Matrix (double d); 00068 Matrix (double d[3][3]); 00074 Matrix (Matrix const &m); 00083 Matrix (Vector const &v1, Vector const &v2, Vector const &v3, bool as_rows = true); 00087 virtual ~Matrix (); 00106 Matrix (double Psi, double Theta, double Phi, MatrixType Type); 00120 Matrix (double x11, double x12, double x13, double x21, double x22, double x23, double x31, double x32, double x33); 00126 Matrix& operator* (Matrix const &cMat) const; 00132 Matrix& operator= (Matrix const &cMat); 00140 void Euler (double& Psi, double& Theta, double& Phi); 00149 void Transform (double &dx, double &dy , double &dz) const; 00156 Vector operator* (Vector const &v) const; 00163 Vector glmult (Vector const &v) const; 00170 double &operator() (unsigned i, unsigned j) {return x[i][j];} 00177 double operator() (unsigned i, unsigned j) const {return x[i][j];} 00178 00179 private: 00180 double x[3][3]; 00181 }; 00182 00186 class GLMatrix 00187 { 00188 public: 00192 GLMatrix (); 00196 virtual ~GLMatrix (); 00197 00203 double &operator() (int i, int j) {return x[i][j];} 00207 double *array () {return (double*) x;} 00208 00209 private: 00210 double x[4][4]; 00211 }; 00212 00213 } //namespace gcu 00214 00215 #endif //GCRYSTAL_MATRIX_H