# geos::algorithm::CGAlgorithms Class Reference

Specifies and implements various fundamental Computational Geometric algorithms. The algorithms supplied in this class are robust for double-precision floating point. More...

`#include <CGAlgorithms.h>`

List of all members.

## Public Types

enum | { CLOCKWISE = -1, COLLINEAR, COUNTERCLOCKWISE }
enum | { RIGHT = -1, LEFT, STRAIGHT }

## Static Public Member Functions

static bool | isPointInRing (const geom::Coordinate &p, const geom::CoordinateSequence *ring)
| Tests whether a point lies inside a ring.
static bool | isPointInRing (const geom::Coordinate &p, const std::vector< const geom::Coordinate * > &ring)
| Same as above, but taking a vector of const Coordinates (faster)
static int | locatePointInRing (const geom::Coordinate &p, const geom::CoordinateSequence &ring)
| Determines whether a point lies in the interior, on the boundary, or in the exterior of a ring.
static int | locatePointInRing (const geom::Coordinate &p, const std::vector< const geom::Coordinate * > &ring)
| Same as above, but taking a vector of const Coordinates.
static bool | isOnLine (const geom::Coordinate &p, const geom::CoordinateSequence *pt)
| Test whether a point lies on the given line segment.
static bool | isCCW (const geom::CoordinateSequence *ring)
| Computes whether a ring defined by an array of Coordinate is oriented counter-clockwise.
static int | computeOrientation (const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &q)
| Computes the orientation of a point q to the directed line segment p1-p2.
static double | distancePointLine (const geom::Coordinate &p, const geom::Coordinate &A, const geom::Coordinate &B)
| Computes the distance from a point p to a line segment AB.
static double | distancePointLinePerpendicular (const geom::Coordinate &p, const geom::Coordinate &A, const geom::Coordinate &B)
| Computes the perpendicular distance from a point p to the (infinite) line containing the points AB.
static double | distanceLineLine (const geom::Coordinate &A, const geom::Coordinate &B, const geom::Coordinate &C, const geom::Coordinate &D)
| Computes the distance from a line segment AB to a line segment CD.
static double | signedArea (const geom::CoordinateSequence *ring)
| Returns the signed area for a ring. The area is positive if the ring is oriented CW.
static double | length (const geom::CoordinateSequence *pts)
| Computes the length of a linestring specified by a sequence of points.
static int | orientationIndex (const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &q)
| Returns the index of the direction of the point `q` relative to a vector specified by `p1-p2`.

## Detailed Description

Specifies and implements various fundamental Computational Geometric algorithms. The algorithms supplied in this class are robust for double-precision floating point.

## Member Function Documentation

static int geos::algorithm::CGAlgorithms::computeOrientation | ( | const geom::Coordinate & | p1,
|  | const geom::Coordinate & | p2,
|  | const geom::Coordinate & | q
| ) |  | `[static]`

Computes the orientation of a point q to the directed line segment p1-p2.

The orientation of a point relative to a directed line segment indicates which way you turn to get to q after travelling from p1 to p2.

Returns:
  1 if q is counter-clockwise from p1-p2
  -1 if q is clockwise from p1-p2
  0 if q is collinear with p1-p2

static double geos::algorithm::CGAlgorithms::distanceLineLine | ( | const geom::Coordinate & | A,
|  | const geom::Coordinate & | B,
|  | const geom::Coordinate & | C,
|  | const geom::Coordinate & | D
| ) |  | `[static]`

Computes the distance from a line segment AB to a line segment CD.

Note: NON-ROBUST!

Parameters:

  A | a point of one line
  B | the second point of (must be different to A)
  C | one point of the line
  D | another point of the line (must be different to A)

static double geos::algorithm::CGAlgorithms::distancePointLine | ( | const geom::Coordinate & | p,
|  | const geom::Coordinate & | A,
|  | const geom::Coordinate & | B
| ) |  | `[static]`

Computes the distance from a point p to a line segment AB.

Note: NON-ROBUST!

Parameters:

  p | the point to compute the distance for
  A | one point of the line
  B | another point of the line (must be different to A)

Returns:
  the distance from p to line segment AB

static double geos::algorithm::CGAlgorithms::distancePointLinePerpendicular | ( | const geom::Coordinate & | p,
|  | const geom::Coordinate & | A,
|  | const geom::Coordinate & | B
| ) |  | `[static]`

Computes the perpendicular distance from a point p to the (infinite) line containing the points AB.

Parameters:

  p | the point to compute the distance for
  A | one point of the line
  B | another point of the line (must be different to A)

Returns:
  the distance from p to line AB

static bool geos::algorithm::CGAlgorithms::isCCW | ( | const geom::CoordinateSequence * | ring ) | `[static]`

Computes whether a ring defined by an array of Coordinate is oriented counter-clockwise.

- The list of points is assumed to have the first and last points equal.
- This will handle coordinate lists which contain repeated points.

This algorithm is only guaranteed to work with valid rings. If the ring is invalid (e.g. self-crosses or touches), the computed result may not be correct.

Parameters:

  ring | an array of coordinates forming a ring

Returns:
  `true` if the ring is oriented counter-clockwise.

static bool geos::algorithm::CGAlgorithms::isOnLine | ( | const geom::Coordinate & | p,
|  | const geom::CoordinateSequence * | pt
| ) |  | `[static]`

Test whether a point lies on the given line segment.

Returns:
  true true if the point is a vertex of the line or lies in the interior of a line segment in the linestring

static bool geos::algorithm::CGAlgorithms::isPointInRing | ( | const geom::Coordinate & | p,
|  | const geom::CoordinateSequence * | ring
| ) |  | `[static]`

Tests whether a point lies inside a ring.

The ring may be oriented in either direction. A point lying exactly on the ring boundary is considered to be inside the ring.

This algorithm does not first check the point against the envelope of the ring.

Parameters:

  p | point to check for ring inclusion
  ring | is assumed to have first point identical to last point

Returns:
  `true` if p is inside ring

See also:
  locatePointInRing

static double geos::algorithm::CGAlgorithms::length | ( | const geom::CoordinateSequence * | pts ) | `[static]`

Computes the length of a linestring specified by a sequence of points.

Parameters:

  pts | the points specifying the linestring

Returns:
  the length of the linestring

static int geos::algorithm::CGAlgorithms::locatePointInRing | ( | const geom::Coordinate & | p,
|  | const geom::CoordinateSequence & | ring
| ) |  | `[static]`

Determines whether a point lies in the interior, on the boundary, or in the exterior of a ring.

The ring may be oriented in either direction.

This method does not first check the point against the envelope of the ring.

Parameters:

  p | point to check for ring inclusion
  ring | an array of coordinates representing the ring (which must have first point identical to last point)

Returns:
  the Location of p relative to the ring

static int geos::algorithm::CGAlgorithms::orientationIndex | ( | const geom::Coordinate & | p1,
|  | const geom::Coordinate & | p2,
|  | const geom::Coordinate & | q
| ) |  | `[static]`

Returns the index of the direction of the point `q` relative to a vector specified by `p1-p2`.

Parameters:

  p1 | the origin point of the vector
  p2 | the final point of the vector
  q | the point to compute the direction to

Returns:
  1 if q is counter-clockwise (left) from p1-p2
  -1 if q is clockwise (right) from p1-p2
  0 if q is collinear with p1-p2

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

- CGAlgorithms.h