#include <iostream> using namespace std; // classe Point #include "point.h" // produit vectoriel double prodvect(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } // classe element générique class Polygone { protected: int np; // nbre de points Point *pt; // liste des points public: Polygone(int n) { np=n; pt=new Point[n]; }; ~Polygone() { delete pt; }; // fonctions devant etre redefinie virtual double surface() { return 0;}; virtual char * type() { return "inconnue:"; }; // methode amie friend ostream& operator<<(ostream &s,const Polygone P); }; // fonction amie permettant l'acces aux donnees ostream& operator<<(ostream &s,const Polygone P) { s<<"["; for (int i=0; i<P.np; i++) s<<P.pt[i]; s<<"]"; return s; } // classe derivee triangle class Triangle:public Polygone { public: Triangle(Point P0,Point P1,Point P2):Polygone(3) { pt[0]=P0; pt[1]=P1; pt[2]=P2;}; // char * type() { return "Triangle: "; }; double surface() { return 0.5*prodvect(pt[1].X()-pt[0].X(),pt[1].Y()-pt[0].Y(), pt[2].X()-pt[0].X(),pt[2].Y()-pt[0].Y());}; }; // et quadrangle regulier class Quadrangle:public Polygone { public: Quadrangle(Point P0,Point P1,Point P2,Point P3):Polygone(4) { pt[0]=P0; pt[1]=P1; pt[2]=P2; pt[3]=P3;}; // char * type() { return "Quadrangle: "; }; double surface() { return 0.5*prodvect(pt[1].X()-pt[0].X(),pt[1].Y()-pt[0].Y(), pt[2].X()-pt[0].X(),pt[2].Y()-pt[0].Y())+ 0.5*prodvect(pt[1].X()-pt[2].X(),pt[1].Y()-pt[2].Y(), pt[3].X()-pt[2].X(),pt[3].Y()-pt[2].Y());}; }; // fonction generique: affichage des elts d'un maillage void info(Polygone* M[],const int n) { for(int i=0; i<n; i++) { cout<<M[i]->type()<<*M[i]<<endl; cout<<"surface="<<M[i]->surface()<<endl; } } // int main() { Point P0(0,0),P1(1,0),P2(0,1),P3(1,1); Triangle T1(P0,P1,P3),T2(P0,P3,P2); Quadrangle Q(P0,P1,P2,P3); // maillage =liste d'elements const int ne=3; Polygone * Mesh[ne]={&T1,&T2,&Q}; // info(Mesh,ne); return 0; }
#include <iostream> using namespace std; // classe de Point class Point { // donnees privees private: double x,y; // methodes public public: // constructeur Point(double a=0,double b=0) { x=a; y=b;}; Point(const Point &P) { x=P.x; y=P.y; }; // acces aux donnees (en lecture uniquement) double X() { return x; } double Y() { return y; } // position void position(double a,double b) { x=a; y=b;}; // surcharge d'operateur: P=P1+P2 Point operator+(const Point P) const { return Point(x+P.x,y+P.y); }; // P=P1*a Point operator*(double a) const { return Point(x*a,y*a); }; // affichage friend ostream& operator<<(ostream &s,const Point P); }; // fonction amie permettant l'acces aux donnees ostream& operator<<(ostream &s,const Point P) { return s<<"("<<P.x<<","<<P.y<<")"; }; //