Polygon.h

Go to the documentation of this file.
00001 
00002 #ifndef POLYGON_IS_INCLUDED
00003 #define POLYGON_IS_INCLUDED
00004 
00005 #include <tools.h>
00006 
00007 
00008 class Polygon; 
00009 class Triangle; 
00010 class Mesh; 
00011 class Point; 
00012 class Edge; 
00013 class Face; 
00014 
00015 enum  Repr_format { 
00016   SUBS_PERFORMED = 1, 
00017   SUBS_NOT_PERFORMED = 2
00018 }; 
00019 
00020 /* Comment:  
00021    Every Polygon can have a name, e.g., for the lines in 
00022    a triangle we can name them   "l1", "l2", "l3".  
00023    In repr we could then represent the lines as
00024    line "l1": [x = A^{l1}*t -x0^{l1}, 
00025                y = B^{l1}*t -y0^{l1}, 
00026                z = C^{l1}*t -z0^{l1}, 
00027                A^{l1} = .., B^{l1} = ..,  C^{l1} = .. 
00028                t, 0, 1 ]
00029 
00030    can also consider to store this stuff as a map !  
00031    E.g., 
00032        equations = lst ( x = ..., y = ..., z = ...)   
00033        subst     = lst ( A^{li} = ..., B^{li} = ...,  C^{li} = ...)      
00034        variables = lst ( t ) 
00035        range     = lst ( 0, 1) 
00036 */ 
00037 
00038 class Polygon {
00039   public: 
00040   string subscript; 
00041   exvector p; 
00042 
00043   Polygon() {}
00044   ~Polygon() {}
00045 
00046   virtual int no_vertices(); 
00047   virtual ex vertex(int i); 
00048   virtual ex integrate(ex f, Repr_format format = SUBS_PERFORMED) { 
00049           //FIXME 
00050           cout <<"Polygon integrate not implemented "<<endl; 
00051           return ex(0); 
00052   }    
00053   virtual string str(); 
00054 }; 
00055 
00056 class Line : public Polygon  {
00057   ex a_; 
00058   ex b_; 
00059   public: 
00060   Line() {}
00061   Line(ex x0, ex x1, string subscript = ""); // x0_ and x1_ are points 
00062   ~Line(){}
00063 
00064   virtual int no_vertices(); 
00065   virtual ex vertex(int i); 
00066   virtual ex repr(ex t, Repr_format format = SUBS_PERFORMED); 
00067   virtual string str(); 
00068   virtual ex integrate(ex f, Repr_format format = SUBS_PERFORMED);    
00069 }; 
00070 
00071 
00072 class ReferenceLine : public Line {
00073   public: 
00074   ReferenceLine(string subscript = ""); 
00075   ~ReferenceLine(){}
00076 
00077   virtual int no_vertices(); 
00078   virtual ex vertex(int i); 
00079   virtual ex repr(ex t, Repr_format format = SUBS_PERFORMED); 
00080   ex a();  
00081   ex b(); 
00082   virtual string str(); 
00083   virtual ex integrate(ex f, Repr_format format = SUBS_PERFORMED); 
00084 }; 
00085 
00086 class Triangle : public Polygon {
00087   public: 
00088   Triangle(ex x0, ex x1, ex x1, string subscript = ""); 
00089   Triangle() {}
00090   ~Triangle(){}
00091 
00092   virtual int no_vertices(); 
00093   virtual ex vertex(int i); 
00094   virtual Line line(int i); 
00095   virtual ex repr(Repr_format = SUBS_PERFORMED); 
00096   virtual string str(); 
00097   virtual ex integrate(ex f, Repr_format format = SUBS_PERFORMED); 
00098 }; 
00099 
00100 class ReferenceTriangle : public Triangle {
00101   public: 
00102   ReferenceTriangle(string subscript = ""); 
00103   ~ReferenceTriangle(){}
00104 
00105   virtual int no_vertices(); 
00106   virtual ex vertex(int i); 
00107   virtual Line line(int i); 
00108   virtual ex repr(Repr_format format = SUBS_PERFORMED); 
00109   virtual string str(); 
00110   virtual ex integrate(ex f); 
00111 }; 
00112 
00113 
00114 
00115 class Tetrahedron : public Polygon {
00116   public: 
00117   Tetrahedron(string subscript) {}
00118   Tetrahedron(ex x0, ex x1, ex x1, ex x2, string subscript = ""); 
00119   ~Tetrahedron(){}
00120 
00121   virtual int no_vertices(); 
00122   virtual ex vertex(int i); 
00123   virtual Line line(int i); 
00124   virtual Triangle triangle(int i); 
00125   virtual ex repr(Repr_format format = SUBS_PERFORMED); 
00126   virtual string str(); 
00127   virtual ex integrate(ex f, Repr_format format = SUBS_PERFORMED);
00128 }; 
00129 
00130 class ReferenceTetrahedron : public Tetrahedron {
00131   public: 
00132   ReferenceTetrahedron(string subscript = ""); 
00133   ~ReferenceTetrahedron(){}
00134 
00135   virtual int no_vertices(); 
00136   virtual ex vertex(int i); 
00137   virtual Line line(int i); 
00138   virtual Triangle triangle(int i); 
00139   virtual ex repr(Repr_format format = SUBS_PERFORMED) { return ex(0); } 
00140   virtual string str(); 
00141   virtual ex integrate(ex f, Repr_format = SUBS_PERFORMED);  
00142 }; 
00143 
00144 
00145 
00146 // Some tools for Polygons 
00147 
00148 // FIXME: change to barycenter(Triangle&)  
00149 // FIXME:       and barycenter(Tetrahedron&)  
00150 ex barycenter_triangle(ex p0, ex p1, ex p2); 
00151 ex barycenter_tetrahedron(ex p0, ex p1, ex p2, ex p3); 
00152 lst bezier_ordinates(Triangle& triangle, int d);  
00153 lst bezier_ordinates(Tetrahedron& tetrahedra, int d);  
00154 
00155 
00156 
00157 
00158 #endif
00159 

Generated on Tue Nov 22 11:10:22 2005 for SyFi by  doxygen 1.4.4