00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 # ifndef shape_plane_hpp
00014 # define shape_plane_hpp
00015
00016
00017 #include <realroot/ring_monomial_tensor.hpp>
00018
00019 # include <shape/shape.hpp>
00020 # define TMPL template<class K>
00021 # define Shape geometric<K>
00022 # define Plane plane<K>
00023 # define POLYNOMIAL polynomial< double,with<MonomialTensor> >
00024
00025 namespace mmx {
00026
00027 namespace shape {
00028 TMPL
00029 class plane : public Shape
00030 {
00031 public:
00032 plane(void) ;
00033 plane(const char * equation) ;
00034 plane(const Plane & other) ;
00035
00036 inline double a(void) const ;
00037 inline double b(void) const ;
00038 inline double c(void) const ;
00039 inline double d(void) const ;
00040
00041 POLYNOMIAL equation(void) const ;
00042
00043 bool operator == (const Plane & other) const ;
00044 bool operator != (const Plane & other) const ;
00045 Plane & operator = (const Plane & other) ;
00046 double & operator [] (const int & i) ;
00047
00048 private:
00049 POLYNOMIAL m_polynomial ;
00050 };
00051
00052 TMPL Plane::plane(void)
00053 {
00054 this->m_polynomial =POLYNOMIAL("x") ;
00055 }
00056
00057 TMPL Plane::plane(const char * equation)
00058 {
00059 this->m_polynomial =POLYNOMIAL(equation) ;
00060 }
00061
00062 TMPL Plane::plane(const Plane & other) {
00063 m_polynomial = other.m_polynomial ;
00064 }
00065
00066 TMPL double
00067 Plane::a(void) const {
00068 return m_polynomial[1] ;
00069 }
00070
00071 TMPL double
00072 Plane::b(void) const {
00073 return m_polynomial[2] ;
00074 }
00075
00076 TMPL double
00077 Plane::c(void) const {
00078 return m_polynomial[3] ;
00079 }
00080
00081 TMPL double
00082 Plane::d(void) const {
00083 return m_polynomial[0] ;
00084 }
00085
00086 TMPL POLYNOMIAL
00087 Plane::equation(void) const {
00088 return m_polynomial ;
00089 }
00090
00094 TMPL bool
00095 Plane::operator == (const Plane & other) const {
00096 return (this->m_polynomial == other.m_polynomial) ;
00097 }
00098
00102 TMPL bool
00103 Plane::operator != (const Plane & other) const {
00104 return !(m_polynomial == other.m_polynomial) ;
00105 }
00106
00107 TMPL Plane&
00108 Plane::operator = (const Plane & other) {
00109 if(this == &other)
00110 return *this ;
00111
00112 this->m_polynomial = other.equation() ;
00113
00114 return * this ;
00115 }
00116
00117 TMPL double &
00118 Plane::operator [] (const int & i) {
00119 switch(i) {
00120 case 0:
00121 return m_polynomial[1] ;
00122 break ;
00123 case 1:
00124 return m_polynomial[2] ;
00125 break ;
00126 case 2:
00127 return m_polynomial[3] ;
00128 break ;
00129 case 3:
00130 return m_polynomial[0] ;
00131 break ;
00132 default:
00133 break ;
00134 }
00135
00136 return *(new double(0.0)) ;
00137 }
00138
00139
00140 } ;
00141 } ;
00142 # undef TMPL
00143 # undef Plane
00144 # undef POLYNOMIAL
00145 # undef Shape
00146 # endif // shape_plane_hpp