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   GiNaC::exvector p; 
00042 
00043   Polygon() {}
00044   ~Polygon() {}
00045 
00046   virtual int no_vertices(); 
00047   virtual GiNaC::ex vertex(int i); 
00048   virtual GiNaC::ex integrate(GiNaC::ex f, Repr_format format = SUBS_PERFORMED) { 
00049           //FIXME 
00050           cout <<"Polygon integrate not implemented "<<endl; 
00051           return GiNaC::ex(0); 
00052   }    
00053   virtual string str(); 
00054 }; 
00055 
00056 class Line : public Polygon  {
00057   GiNaC::ex a_; 
00058   GiNaC::ex b_; 
00059   public: 
00060   Line() {}
00061   Line(GiNaC::ex x0, GiNaC::ex x1, string subscript = ""); // x0_ and x1_ are points 
00062   ~Line(){}
00063 
00064   virtual int no_vertices(); 
00065   virtual GiNaC::ex vertex(int i); 
00066   virtual GiNaC::ex repr(GiNaC::ex t, Repr_format format = SUBS_PERFORMED); 
00067   virtual string str(); 
00068   virtual GiNaC::ex integrate(GiNaC::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 GiNaC::ex vertex(int i); 
00079   virtual GiNaC::ex repr(GiNaC::ex t, Repr_format format = SUBS_PERFORMED); 
00080   GiNaC::ex a();  
00081   GiNaC::ex b(); 
00082   virtual string str(); 
00083   virtual GiNaC::ex integrate(GiNaC::ex f, Repr_format format = SUBS_PERFORMED); 
00084 }; 
00085 
00086 class Triangle : public Polygon {
00087   public: 
00088   Triangle(GiNaC::ex x0, GiNaC::ex x1, GiNaC::ex x1, string subscript = ""); 
00089   Triangle() {}
00090   ~Triangle(){}
00091 
00092   virtual int no_vertices(); 
00093   virtual GiNaC::ex vertex(int i); 
00094   virtual Line line(int i); 
00095   virtual GiNaC::ex repr(Repr_format = SUBS_PERFORMED); 
00096   virtual string str(); 
00097   virtual GiNaC::ex integrate(GiNaC::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 GiNaC::ex vertex(int i); 
00107   virtual Line line(int i); 
00108   virtual GiNaC::ex repr(Repr_format format = SUBS_PERFORMED); 
00109   virtual string str(); 
00110   virtual GiNaC::ex integrate(GiNaC::ex f); 
00111 }; 
00112 
00113 
00114 
00115 class Tetrahedron : public Polygon {
00116   public: 
00117   Tetrahedron(string subscript) {}
00118   Tetrahedron(GiNaC::ex x0, GiNaC::ex x1, GiNaC::ex x1, GiNaC::ex x2, string subscript = ""); 
00119   ~Tetrahedron(){}
00120 
00121   virtual int no_vertices(); 
00122   virtual GiNaC::ex vertex(int i); 
00123   virtual Line line(int i); 
00124   virtual Triangle triangle(int i); 
00125   virtual GiNaC::ex repr(Repr_format format = SUBS_PERFORMED); 
00126   virtual string str(); 
00127   virtual GiNaC::ex integrate(GiNaC::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 GiNaC::ex vertex(int i); 
00137   virtual Line line(int i); 
00138   virtual Triangle triangle(int i); 
00139   virtual GiNaC::ex repr(Repr_format format = SUBS_PERFORMED) { return GiNaC::ex(0); } 
00140   virtual string str(); 
00141   virtual GiNaC::ex integrate(GiNaC::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 GiNaC::ex barycenter_line(GiNaC::ex p0, GiNaC::ex p1); 
00151 GiNaC::ex barycenter_triangle(GiNaC::ex p0, GiNaC::ex p1, GiNaC::ex p2); 
00152 GiNaC::ex barycenter_tetrahedron(GiNaC::ex p0, GiNaC::ex p1, GiNaC::ex p2, GiNaC::ex p3); 
00153 GiNaC::lst bezier_ordinates(Triangle& triangle, int d);  
00154 GiNaC::lst bezier_ordinates(Tetrahedron& tetrahedra, int d);  
00155 
00156 // polynom of arbitrary order on a line, a triangle, 
00157 // or a tetrahedron using the Bernstein basis 
00158 GiNaC::ex bernstein(int order, Polygon& p, const string a);  
00159 
00160 // vector polynom of arbitrary order on a line, a triangle, 
00161 // or a tetrahedron using the Bernstein basis 
00162 GiNaC::lst bernsteinv(int order, Polygon& p, const string a);  
00163 
00164 GiNaC::lst normal(Triangle&, int i); 
00165 GiNaC::lst normal(Tetrahedron&, int i); 
00166 
00167 
00168 
00169 
00170 
00171 
00172 #endif
00173 

Generated on Mon Jan 9 18:08:08 2006 for SyFi by  doxygen 1.4.4