geos::algorithm::LineIntersector Class Reference

A LineIntersector is an algorithm that can both test whether two line segments intersect and compute the intersection point if they do. More...

#include <LineIntersector.h>

List of all members.

Public Types

enum  { DONT_INTERSECT, DO_INTERSECT, COLLINEAR }

Public Member Functions

 LineIntersector (const geom::PrecisionModel *initialPrecisionModel=NULL)
bool isInteriorIntersection ()
 Tests whether either intersection point is an interior point of one of the input segments.
bool isInteriorIntersection (int inputLineIndex)
 Tests whether either intersection point is an interior point of the specified input segment.
void setPrecisionModel (const geom::PrecisionModel *newPM)
 Force computed intersection to be rounded to a given precision model.
void computeIntersection (const geom::Coordinate &p, const geom::Coordinate &p1, const geom::Coordinate &p2)
 Compute the intersection of a point p and the line p1-p2.
void computeIntersection (const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &p3, const geom::Coordinate &p4)
 Computes the intersection of the lines p1-p2 and p3-p4.
std::string toString () const
bool hasIntersection () const
int getIntersectionNum () const
 Returns the number of intersection points found.
const geom::CoordinategetIntersection (int intIndex) const
 Returns the intIndex'th intersection point.
bool isIntersection (const geom::Coordinate &pt) const
 Test whether a point is a intersection point of two line segments.
bool isProper () const
 Tests whether an intersection is proper.
const geom::CoordinategetIntersectionAlongSegment (int segmentIndex, int intIndex)
 Computes the intIndex'th intersection point in the direction of a specified input line segment.
int getIndexAlongSegment (int segmentIndex, int intIndex)
 Computes the index of the intIndex'th intersection point in the direction of a specified input line segment.
double getEdgeDistance (int geomIndex, int intIndex) const
 Computes the "edge distance" of an intersection point along the specified input line segment.

Static Public Member Functions

static double interpolateZ (const geom::Coordinate &p, const geom::Coordinate &p0, const geom::Coordinate &p1)
 Return a Z value being the interpolation of Z from p0 and p1 at the given point p.
static double computeEdgeDistance (const geom::Coordinate &p, const geom::Coordinate &p0, const geom::Coordinate &p1)
 Computes the "edge distance" of an intersection point p in an edge.
static double nonRobustComputeEdgeDistance (const geom::Coordinate &p, const geom::Coordinate &p1, const geom::Coordinate &p2)
static bool hasIntersection (const geom::Coordinate &p, const geom::Coordinate &p1, const geom::Coordinate &p2)
 Same as above but doen's compute intersection point. Faster.
static bool isSameSignAndNonZero (double a, double b)
 Returns false if both numbers are zero.


Detailed Description

A LineIntersector is an algorithm that can both test whether two line segments intersect and compute the intersection point if they do.

The intersection point may be computed in a precise or non-precise manner. Computing it precisely involves rounding it to an integer. (This assumes that the input coordinates have been made precise by scaling them to an integer grid.)


Member Function Documentation

static double geos::algorithm::LineIntersector::computeEdgeDistance ( const geom::Coordinate p,
const geom::Coordinate p0,
const geom::Coordinate p1 
) [static]

Computes the "edge distance" of an intersection point p in an edge.

The edge distance is a metric of the point along the edge. The metric used is a robust and easy to compute metric function. It is not equivalent to the usual Euclidean metric. It relies on the fact that either the x or the y ordinates of the points in the edge are unique, depending on whether the edge is longer in the horizontal or vertical direction.

NOTE: This function may produce incorrect distances for inputs where p is not precisely on p1-p2 (E.g. p = (139,9) p1 = (139,10), p2 = (280,1) produces distanct 0.0, which is incorrect.

My hypothesis is that the function is safe to use for points which are the result of rounding points which lie on the line, but not safe to use for truncated points.

bool geos::algorithm::LineIntersector::isInteriorIntersection (  ) 

Tests whether either intersection point is an interior point of one of the input segments.

Returns:
true if either intersection point is in the interior of one of the input segments

bool geos::algorithm::LineIntersector::isInteriorIntersection ( int  inputLineIndex  ) 

Tests whether either intersection point is an interior point of the specified input segment.

Returns:
true if either intersection point is in the interior of the input segment

void geos::algorithm::LineIntersector::setPrecisionModel ( const geom::PrecisionModel newPM  )  [inline]

Force computed intersection to be rounded to a given precision model.

No getter is provided, because the precision model is not required to be specified.

Parameters:
precisionModel the PrecisionModel to use for rounding

void geos::algorithm::LineIntersector::computeIntersection ( const geom::Coordinate p,
const geom::Coordinate p1,
const geom::Coordinate p2 
)

Compute the intersection of a point p and the line p1-p2.

This function computes the boolean value of the hasIntersection test. The actual value of the intersection (if there is one) is equal to the value of p.

bool geos::algorithm::LineIntersector::hasIntersection (  )  const [inline]

Tests whether the input geometries intersect.

Returns:
true if the input geometries intersect

int geos::algorithm::LineIntersector::getIntersectionNum (  )  const [inline]

Returns the number of intersection points found.

This will be either 0, 1 or 2.

const geom::Coordinate& geos::algorithm::LineIntersector::getIntersection ( int  intIndex  )  const [inline]

Returns the intIndex'th intersection point.

Parameters:
intIndex is 0 or 1
Returns:
the intIndex'th intersection point

static bool geos::algorithm::LineIntersector::isSameSignAndNonZero ( double  a,
double  b 
) [static]

Returns false if both numbers are zero.

Returns:
true if both numbers are positive or if both numbers are negative.

bool geos::algorithm::LineIntersector::isIntersection ( const geom::Coordinate pt  )  const

Test whether a point is a intersection point of two line segments.

Note that if the intersection is a line segment, this method only tests for equality with the endpoints of the intersection segment. It does not return true if the input point is internal to the intersection segment.

Returns:
true if the input point is one of the intersection points.

bool geos::algorithm::LineIntersector::isProper (  )  const [inline]

Tests whether an intersection is proper.

The intersection between two line segments is considered proper if they intersect in a single point in the interior of both segments (e.g. the intersection is a single point and is not equal to any of the endpoints).

The intersection between a point and a line segment is considered proper if the point lies in the interior of the segment (e.g. is not equal to either of the endpoints).

Returns:
true if the intersection is proper

const geom::Coordinate& geos::algorithm::LineIntersector::getIntersectionAlongSegment ( int  segmentIndex,
int  intIndex 
)

Computes the intIndex'th intersection point in the direction of a specified input line segment.

Parameters:
segmentIndex is 0 or 1
intIndex is 0 or 1
Returns:
the intIndex'th intersection point in the direction of the specified input line segment

int geos::algorithm::LineIntersector::getIndexAlongSegment ( int  segmentIndex,
int  intIndex 
)

Computes the index of the intIndex'th intersection point in the direction of a specified input line segment.

Parameters:
segmentIndex is 0 or 1
intIndex is 0 or 1
Returns:
the index of the intersection point along the segment (0 or 1)

double geos::algorithm::LineIntersector::getEdgeDistance ( int  geomIndex,
int  intIndex 
) const

Computes the "edge distance" of an intersection point along the specified input line segment.

Parameters:
segmentIndex is 0 or 1
intIndex is 0 or 1
Returns:
the edge distance of the intersection point


The documentation for this class was generated from the following file:
Generated on Fri Mar 27 04:53:12 2009 for GEOS by  doxygen 1.5.4