geos::algorithm::CGAlgorithmsDD Class Reference

Implements basic computational geometry algorithms using extended precision float-point arithmetic. More...

`#include <CGAlgorithmsDD.h>`

## Public Types

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

## Static Public Member Functions

static int | orientationIndex (const geom::CoordinateXY &p1, const geom::CoordinateXY &p2, const geom::CoordinateXY &q)
| Returns the index of the direction of the point q relative to a vector specified by p1-p2.
static int | orientationIndex (double p1x, double p1y, double p2x, double p2y, double qx, double qy)
static int | orientationIndexFilter (double pax, double pay, double pbx, double pby, double pcx, double pcy)
static int | orientation (double x)
static geom::CoordinateXY | intersection (const geom::CoordinateXY &p1, const geom::CoordinateXY &p2, const geom::CoordinateXY &q1, const geom::CoordinateXY &q2)
static int | signOfDet2x2 (double dx1, double dy1, double dx2, double dy2)
static DD | detDD (double x1, double y1, double x2, double y2)
static DD | detDD (const DD &x1, const DD &y1, const DD &x2, const DD &y2)
static geom::CoordinateXY | circumcentreDD (const geom::CoordinateXY &a, const geom::CoordinateXY &b, const geom::CoordinateXY &c)
| Computes the circumcentre of a triangle.

## Static Protected Member Functions

static int | signOfDet2x2 (const DD &x1, const DD &y1, const DD &x2, const DD &y2)

## Detailed Description

Implements basic computational geometry algorithms using extended precision float-point arithmetic.

## Member Function Documentation

## circumcentreDD()

geom::CoordinateXY geos::algorithm::CGAlgorithmsDD::circumcentreDD | ( | const geom::CoordinateXY & | a,
|  | const geom::CoordinateXY & | b,
|  | const geom::CoordinateXY & | c )

static

Computes the circumcentre of a triangle.

The circumcentre is the centre of the circumcircle, the smallest circle which encloses the triangle. It is also the common intersection point of the perpendicular bisectors of the sides of the triangle, and is the only point which has equal distance to all three vertices of the triangle.

The circumcentre does not necessarily lie within the triangle. For example, the circumcentre of an obtuse isosceles triangle lies outside the triangle.

This method uses geos::math::DD extended-precision arithmetic to provide more accurate results than geos::geom::Triangle::circumcentre.

Parameters

  a | a vertex of the triangle
  b | a vertex of the triangle
  c | a vertex of the triangle

Returns
  the circumcentre of the triangle

## intersection()

geom::CoordinateXY geos::algorithm::CGAlgorithmsDD::intersection | ( | const geom::CoordinateXY & | p1,
|  | const geom::CoordinateXY & | p2,
|  | const geom::CoordinateXY & | q1,
|  | const geom::CoordinateXY & | q2 )

static

If the lines are parallel (either identical or separate) a null value is returned.

Parameters

  p1 | an endpoint of line segment 1
  p2 | an endpoint of line segment 1
  q1 | an endpoint of line segment 2
  q2 | an endpoint of line segment 2

Returns
  an intersection point if one exists, or null if the lines are parallel

## orientationIndex()

int geos::algorithm::CGAlgorithmsDD::orientationIndex | ( | const geom::CoordinateXY & | p1,
|  | const geom::CoordinateXY & | p2,
|  | const geom::CoordinateXY & | 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

References orientationIndex().

Referenced by orientationIndex().

## orientationIndexFilter()

int geos::algorithm::CGAlgorithmsDD::orientationIndexFilter | ( | double | pax,
|  | double | pay,
|  | double | pbx,
|  | double | pby,
|  | double | pcx,
|  | double | pcy )

inline static

A filter for computing the orientation index of three coordinates.

If the orientation can be computed safely using standard DP arithmetic, this routine returns the orientation index.

The filter is fast to compute, so can be used to avoid the use of slower robust methods except when they are really needed, thus providing better average performance.

Jonathan Shewchuk Robust Adaptive Floating-Point Geometric Predicates Proceedings of the Twelfth Annual Symposium on Computational Geometry, ACM, May 1996

Ozaki, K., Bünger, F., Ogita, T. et al. Simple floating-point filters for the two-dimensional orientation problem. BitNumer Math 56, 729–749 (2016). https://doi.org/10.1007/s10543-015-0574-9

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

- CGAlgorithmsDD.h