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
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
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
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 = "");
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
00147
00148
00149
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