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 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
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 = "");
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
00147
00148
00149
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
00157
00158 GiNaC::ex bernstein(int order, Polygon& p, const string a);
00159
00160
00161
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