00001 /*************************************************************************** 00002 vector.h - A 3D vector class 00003 ------------------- 00004 begin : Tue Apr 23 2002 00005 copyright : (C) 2002 by CJP 00006 email : cornware-cjp@users.sourceforge.net 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This program is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU General Public License as published by * 00013 * the Free Software Foundation; either version 2 of the License, or * 00014 * (at your option) any later version. * 00015 * * 00016 ***************************************************************************/ 00017 #ifndef LIBPLANETCVECTOR_H 00018 #define LIBPLANETCVECTOR_H 00019 00020 namespace libProcTer { 00021 00022 class CMatrix; 00023 00029 class CVector 00030 { 00031 public: 00033 CVector(); 00035 CVector( double xa, double ya, double za); 00036 00038 CVector const &operator*=(CMatrix const &val); 00043 CVector const &operator/=(CMatrix const &val); 00044 00046 CVector const operator*(double const &val) const; 00048 CVector const &operator*=(double const &val); 00050 CVector const operator/(double const &val) const; 00052 CVector const &operator/=(double const &val); 00053 00055 CVector const operator+(CVector const &val) const; 00057 CVector const operator-(CVector const &val) const; 00059 CVector const &operator+=(CVector const &val); 00061 CVector const &operator-=(CVector const &val); 00063 CVector const operator-() const; 00064 00066 double const operator*(CVector const &val) const; //dot product 00068 double dotProduct(CVector const &val) const; 00070 CVector crossProduct(CVector const &val) const; 00071 00073 bool operator!=(CVector const &val) const; 00074 00076 double abs() const; 00078 double abs2() const; 00080 void normalise(); 00082 CVector normal() const; 00087 CVector component(CVector const &val) const; 00088 00090 00091 double x, y, z; 00093 }; 00094 00096 CVector const operator*(double const &val1, CVector const &val2); 00097 00098 } 00099 00100 #endif