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_ */
|