BOOKS i'm reading |
/* * Module ID: hedge.h * Titre : Declaration de la classe halfEdge. * Utilite : Classe utilisee pour la construction du diagramme de Voronoi * * Auteur : Olivier Langlois (olivier@olivierlanglois.net) * Date : 24 Fevrier 1998 */ #ifndef _HEDGE_H_ #define _HEDGE_H_ #include "collect/vector.h" #include "uref.h" #include "geo/circle.h" #include "geo/dcel.h" /* * Declarations partielles */ class halfEdge; typedef halfEdge* halfEdgeP; GVectordeclare(halfEdgeP) class halfEdge : public Reference { public: halfEdge( edge *e = NULL, char dir = 0 ); // ve est insere dans le DCEL dans le destructeur ~halfEdge(); static void init( size_t ); static void terminate( void ); /****************************************************************************** * * Nom : insert * * Utilite : Insere cette arete dans la liste. * * Parametres: * lb (halfEdge *) Arete a gauche de l'arete a inseree. * * Valeur de retour: Aucune. * ****************************************************************************/ void insert( halfEdge *lb ); Boolean atRight( const point & ) const; vertex *intersection( halfEdge *e2 ); /****************************************************************************** * * Nom : leftbnd * * Utilite : Retrouve l'arete dont le point est le plus proche. * * Parametres: * p (const point &) * * Valeur de retour: (halfEdge *) Arete trouve. * ****************************************************************************/ static halfEdge *leftbnd(const point &p); // Fonctions Setters void setV1( vertex *v ); void setV2( vertex *v ); void setYStar( vertex *v, const point &p ); void removeYStar( void ); // Fonctions getters halfEdge *previous() { return Previous; } halfEdge *next() { return Next; } face *leftSite(); face *rightSite(); const circle &getYStar() { return ystar; } // Operateurs necessaire pour le bon fonctionnement de PQ<halfEdge> // Voir PQ.h pour plus de detail. // Note : Plus ystar est petit, plus la priorite est grande. int operator==(const halfEdge&) const; int operator!=(const halfEdge&) const; int operator <(const halfEdge&) const; int operator >(const halfEdge&) const; int operator<=(const halfEdge&) const; int operator>=(const halfEdge&) const; edge *ve; /* * vertex est l'intersection de 2 bissectrices de paire de sites * et possiblement un vertex de ve. */ vertex *Vertex; char direction; // 0 == Partie gauche du edge // 1 == Partie droite du edge // et lorsque halfEdge est vertical, // la partie gauche pointe vers le haut // et la partie droite vers le bas. // Sentinel static halfEdge *leftEnd; static halfEdge *rightEnd; private: halfEdge *Previous; halfEdge *Next; Boolean V1isSetted; Boolean V2isSetted; static size_t setTable(size_t); /* * Hash table: * Cette table est tres importante, elle indique ou doit commencer la * recherche dans la liste de halhEdges en fonction de la coordonnee x * du dernier site "scanne". */ static GVector(halfEdgeP) table_; circle ystar; float c; }; #endif /* _HEDGE_H_ */ |