Files Classes Functions Hierarchy
00001 #ifndef TETRAHEDRONPARTITION_H 00002 #define TETRAHEDRONPARTITION_H 00003 00004 #include <halfspaceD3.h> 00005 #include <partitionspace.h> 00006 #include <typedefs.h> 00007 00011 template< typename T, typename D > 00012 class tetrahedronpartition : public partitionspace<T> 00013 { 00014 public: 00015 00017 T pi[4]; 00018 00021 halfspaceD3<T,D> hi[4]; 00022 00025 tetrahedronpartition 00026 ( 00027 T const & p0_, 00028 T const & p1_, 00029 T const & p2_, 00030 T const & p3_ 00031 ); 00033 tetrahedronpartition() {} 00036 void construct 00037 ( 00038 T const & p0_, 00039 T const & p1_, 00040 T const & p2_, 00041 T const & p3_ 00042 ); 00043 00045 boolc isInside( T const & x ) const; 00046 00047 }; 00048 00049 00050 // --------------------------------------------------------- 00051 // Implementation 00052 00053 00054 template< typename T, typename D > 00055 tetrahedronpartition<T,D>::tetrahedronpartition 00056 ( 00057 T const & p0_, 00058 T const & p1_, 00059 T const & p2_, 00060 T const & p3_ 00061 ) 00062 { 00063 construct(p0_,p1_,p2_,p3_); 00064 } 00065 00066 00067 template< typename T, typename D > 00068 void tetrahedronpartition<T,D>::construct 00069 ( 00070 T const & p0_, 00071 T const & p1_, 00072 T const & p2_, 00073 T const & p3_ 00074 ) 00075 { 00076 pi[0] = p0_; 00077 pi[1] = p1_; 00078 pi[2] = p2_; 00079 pi[3] = p3_; 00080 00081 hi[3] = halfspaceD3<T,D>(p0_,p1_,p2_); 00082 assert( hi[3].isInside(pi[3])==true ); 00083 hi[1] = halfspaceD3<T,D>(p0_,p2_,p3_); 00084 assert( hi[1].isInside(pi[1])==true ); 00085 hi[2] = halfspaceD3<T,D>(p3_,p1_,p0_); 00086 assert( hi[2].isInside(pi[2])==true ); 00087 hi[0] = halfspaceD3<T,D>(p2_,p1_,p3_); 00088 assert( hi[0].isInside(pi[0])==true ); 00089 } 00090 00091 template< typename T, typename D > 00092 boolc tetrahedronpartition<T,D>::isInside( T const & x ) const 00093 { 00094 for (uint i=0; i<4; ++i) 00095 if (!hi[i].isInside(x)) 00096 return false; 00097 00098 return true; 00099 } 00100 00101 #endif 00102 00103
1.5.8