Public Member Functions | Protected Member Functions | Protected Attributes | Friends

geos::geomgraph::EdgeEnd Class Reference

Models the end of an edge incident on a node. More...

#include <EdgeEnd.h>

Inheritance diagram for geos::geomgraph::EdgeEnd:
geos::geomgraph::DirectedEdge geos::operation::relate::EdgeEndBundle

List of all members.

Public Member Functions

 EdgeEnd (Edge *newEdge, const geom::Coordinate &newP0, const geom::Coordinate &newP1, Label *newLabel=NULL)
Edge * getEdge ()
virtual LabelgetLabel ()
virtual geom::CoordinategetCoordinate ()
virtual geom::CoordinategetDirectedCoordinate ()
virtual int getQuadrant ()
virtual double getDx ()
virtual double getDy ()
virtual void setNode (Node *newNode)
virtual Node * getNode ()
virtual int compareTo (const EdgeEnd *e) const
virtual int compareDirection (const EdgeEnd *e) const
virtual void computeLabel (const algorithm::BoundaryNodeRule &bnr)
virtual std::string print ()

Protected Member Functions

 EdgeEnd (Edge *newEdge)
virtual void init (const geom::Coordinate &newP0, const geom::Coordinate &newP1)

Protected Attributes

Edge * edge
Labellabel

Friends

std::ostream & operator<< (std::ostream &, const EdgeEnd &)

Detailed Description

Models the end of an edge incident on a node.

EdgeEnds have a direction determined by the direction of the ray from the initial point to the next point. EdgeEnds are comparable under the ordering "a has a greater angle with the x-axis than b". This ordering is used to sort EdgeEnds around a node.


Constructor & Destructor Documentation

geos::geomgraph::EdgeEnd::EdgeEnd ( Edge *  newEdge,
const geom::Coordinate newP0,
const geom::Coordinate newP1,
Label newLabel = NULL 
)

NOTES:

  • takes ownership of given Label (if any)
  • keeps a pointer to given Edge, make sure it's not deleted before the EdgeEnd.
  • copies given Coordinates (maybe we should avoid that)

Member Function Documentation

virtual int geos::geomgraph::EdgeEnd::compareDirection ( const EdgeEnd e  )  const [virtual]

Implements the total order relation:

a has a greater angle with the positive x-axis than b

Using the obvious algorithm of simply computing the angle is not robust, since the angle calculation is obviously susceptible to roundoff. A robust algorithm is:

  • first compare the quadrant. If the quadrants are different, it it trivial to determine which vector is "greater".
  • if the vectors lie in the same quadrant, the computeOrientation function can be used to decide the relative orientation of the vectors.

The documentation for this class was generated from the following file: