next up previous contents
Next: Protection contre les dépassements Up: LEÇON Les classes Triangulation Previous: LEÇON Les classes Triangulation

Première amélioration

Une amélioration est donnée par le programme suivant. D'abord la structure est enrichie; le tableaux des arêtes est défini, les sommets connaissent les numéros de tous les triangles auquel ils appartiennent (supp), ainsi que les numero des sommets auquels ils sont reliés par une arête (mate). De même les triangles connaissent non seulement leurs 3 sommets mais aussi leurs 3 arêtes et les 3 triangles voisins par les arêtes.

class Vertex {
public:
    float x, y;           // cordinates          
    int no, where;        // on which boundary      
    int nsupp;            // nb of triangles which contains this vertex
    Triangle* supp;       //all triangles which contain the vertex
    int nmate;            // number of neighbor vertices
    Vertex* mate;         // all neighbors
 };

class Triangle {
public:
    Vertex* v[3];        // the 3 vertices of the triangle      
    Edge* e[3];          // pointer to the edges opposite each vertex 
    int no, where;       //  in which region                  
    float area;
};

class Edge { public:
    Vertex *in, *out;     // oriented by first to last vertex
    Triangle *left, *right;   // triangles on each side of edge
    int where;            // on which curve (or boundary)
    float length;          
};

class Grid {
public:
    int nt, nv, ne;       // nb of triangles, vertices and edges
    int nbholes;          // nb of holes in the domain
    int bdth;             // bandwidth
    Vertex* v;            // all vertices
    Triangle* t;          // all triangles        
    Edge* e;              // all edges
Grid(const char *path );      
};

En quoi est-ce une amélioration? Les données sont mieux encapsulées dans leurs classes. Les triangles contiennent des pointeurs sur les vertex et non plus leurs numéros. Ainsi si la numérotation change on n'a pas besoin de mettre à jour les données. Le prix à payer est que les numéros des sommets et des triangles doivent être stockés afin de pouvoir y accéder (c'est le champs no), mais nous verrons qu'on peut en fait se débarrasser de ce champs et retrouver leurs numéros par leurs adresses.



Olivier Pironneau
Mon May 17 17:14:42 METDST 1999