00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _CHASTEPOINT_HPP_
00031 #define _CHASTEPOINT_HPP_
00032
00033 #include "UblasIncludes.hpp"
00034 #include <cassert>
00035 #include <vector>
00036 #include "Exception.hpp"
00037 using namespace boost::numeric::ublas;
00038
00039
00040 template<unsigned DIM>
00041 class ChastePoint
00042 {
00043 private:
00044 c_vector<double, DIM> mLocation;
00045
00046 public:
00047
00058 ChastePoint(double v1=0, double v2=0, double v3=0)
00059 {
00060 if (DIM>0)
00061 {
00062 mLocation[0] = v1;
00063 }
00064 if (DIM>1)
00065 {
00066 mLocation[1] = v2;
00067 }
00068 if (DIM>2)
00069 {
00070 mLocation[2] = v3;
00071 }
00072 }
00073
00079 ChastePoint(std::vector<double> coords)
00080 {
00081 for (unsigned i=0; i<DIM; i++)
00082 {
00083 mLocation(i) = coords.at(i);
00084 }
00085 }
00086
00087 ChastePoint(c_vector<double, DIM> location)
00088 {
00089 mLocation = location;
00090 }
00091
00092 c_vector<double, DIM>& rGetLocation(void)
00093 {
00094 return mLocation;
00095 }
00096
00097 const c_vector<double, DIM>& rGetLocation(void) const
00098 {
00099 return mLocation;
00100 }
00101
00102 double operator[] (unsigned i) const
00103 {
00104 assert(i<DIM);
00105 return mLocation(i);
00106 }
00107
00108 void SetCoordinate(unsigned i, double value)
00109 {
00110 assert(i<DIM);
00111 mLocation(i) = value;
00112 }
00113 };
00114
00115 template<>
00116 class ChastePoint<0>
00117 {
00118 public:
00119
00124 ChastePoint(double v1=0, double v2=0, double v3=0)
00125 {
00126 }
00127
00128 double operator[] (unsigned i) const
00129 {
00130 EXCEPTION("Zero-dimensional point has no data");
00131 }
00132 };
00133
00134
00135 #endif //_CHASTEPOINT_HPP_