Home
Fractals
Tutorials
Books
Archive
My blog
My LinkedIn Profile

BOOKS i'm reading

Napoleon Hill Keys to Success: The 17 Principles of Personal Achievement, Napoleon Hill, ISBN: 978-0452272811
The 4-Hour Workweek: Escape 9-5, Live Anywhere, and Join the New Rich (Expanded and Updated), Timothy Ferriss, ISBN: 978-0307465351
The Fountainhead, Ayn Rand, ISBN: 0452273331

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

Home :: Fractals :: Tutorials :: Books :: Archive :: My blog :: My LinkedIn Profile :: Contact