Main Page | Namespace List | Alphabetical List | Class List | File List | Class Members | File Members

MVector.cpp

Go to the documentation of this file.
00001 //=======================================================================
00002 // Basic C++: a simple mathematical vector class
00003 //      Implementation
00004 //-----------------------------------------------------------------------
00005 // Jean-Paul Rigault --- Copyright 2004
00006 // $Id: MVector.cpp,v 1.2 2004/11/28 16:50:16 jpr Exp $
00007 //=======================================================================
00008 
00009 #include "MVector.h"
00010 
00017 MVector::MVector(int n, double x)
00018     : _ncomps(n), _components(n, x) 
00019 {
00020     // Nothing else to do
00021 }
00022 
00028 double MVector::norm() const 
00029 {  
00030     return *this * *this;  
00031 }
00032 
00033 
00037 bool operator==(const MVector& mv1, const MVector& mv2)
00038 {
00039     if (mv1._ncomps != mv2._ncomps) return false;
00040     return mv1._components == mv2._components;
00041 }
00042 
00046 MVector operator+(const MVector& mv1, const MVector& mv2)
00047 {
00048     if (mv1._ncomps != mv2._ncomps) throw MVector::Bad_Dimensions();
00049 
00050     int n = mv1._ncomps;
00051     MVector mv(n);    
00052     for (int i = 0; i < n; ++i)
00053         mv._components[i] = mv1._components[i] + mv2._components[i];
00054     return mv;
00055 }
00056 
00060 MVector operator-(const MVector& mv1, const MVector& mv2)
00061 {
00062     if (mv1._ncomps != mv2._ncomps) throw MVector::Bad_Dimensions();
00063 
00064     int n = mv1._ncomps;
00065     MVector mv(n);    
00066     for (int i = 0; i < n; ++i)
00067         mv._components[i] = mv1._components[i] - mv2._components[i];
00068     return mv;
00069 }
00070 
00074 double operator*(const MVector& mv1, const MVector& mv2)
00075 {
00076     if (mv1._ncomps != mv2._ncomps) throw MVector::Bad_Dimensions();
00077 
00078     int n = mv1._ncomps;
00079     double prod = 0.0;
00080     for (int i = 0; i < n; ++i)
00081         prod += mv1._components[i] * mv2._components[i];
00082     return prod;
00083 }
00084 
00085 double& MVector::operator[](int i)
00086 {
00087     if (i < 0 || i >= _ncomps) throw Out_Of_Bounds();
00088     return _components[i];
00089 }
00090 
00091 double MVector::operator[](int i) const
00092 {
00093     if (i < 0 || i >= _ncomps) throw Out_Of_Bounds();
00094     return _components[i];
00095 }
00096 
00100 ostream& operator<<(ostream& os, const MVector& mv)
00101 {
00102     os << "[ ";
00103     for (int i = 0; i < mv._ncomps; ++i)
00104         os << mv._components[i] << ' ';
00105     os << ']';
00106     return os;
00107 }

Generated on Mon Dec 12 18:25:42 2005 for Vectors_and_Matrices by  doxygen 1.4.3