21 #include <geos/export.h>
22 #include <geos/math/DD.h>
28 class CoordinateSequence;
67 const geom::CoordinateXY& p2,
68 const geom::CoordinateXY& q);
71 static int orientationIndex(
double p1x,
double p1y,
72 double p2x,
double p2y,
73 double qx,
double qy);
90 double pax,
double pay,
91 double pbx,
double pby,
92 double pcx,
double pcy)
98 double constexpr DP_SAFE_EPSILON = 1e-15;
101 double const detleft = (pax - pcx) * (pby - pcy);
102 double const detright = (pay - pcy) * (pbx - pcx);
103 double const det = detleft - detright;
106 if(detright <= 0.0) {
107 return orientation(det);
110 detsum = detleft + detright;
113 else if(detleft < 0.0) {
114 if(detright >= 0.0) {
115 return orientation(det);
118 detsum = -detleft - detright;
122 return orientation(det);
125 double const errbound = DP_SAFE_EPSILON * detsum;
126 if((det >= errbound) || (-det >= errbound)) {
127 return orientation(det);
129 return CGAlgorithmsDD::FAILURE;
133 orientation(
double x)
136 return CGAlgorithmsDD::RIGHT;
139 return CGAlgorithmsDD::LEFT;
141 return CGAlgorithmsDD::STRAIGHT;
153 static geom::CoordinateXY
intersection(
const geom::CoordinateXY& p1,
const geom::CoordinateXY& p2,
154 const geom::CoordinateXY& q1,
const geom::CoordinateXY& q2);
156 static int signOfDet2x2(
double dx1,
double dy1,
double dx2,
double dy2);
158 static DD detDD(
double x1,
double y1,
double x2,
double y2);
159 static DD detDD(
const DD& x1,
const DD& y1,
const DD& x2,
const DD& y2);
180 static geom::CoordinateXY
circumcentreDD(
const geom::CoordinateXY& a,
const geom::CoordinateXY& b,
const geom::CoordinateXY& c);
184 static int signOfDet2x2(
const DD& x1,
const DD& y1,
const DD& x2,
const DD& y2);
Implements basic computational geometry algorithms using extended precision float-point arithmetic.
Definition: CGAlgorithmsDD.h:36
static int orientationIndexFilter(double pax, double pay, double pbx, double pby, double pcx, double pcy)
Definition: CGAlgorithmsDD.h:89
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 geom::CoordinateXY circumcentreDD(const geom::CoordinateXY &a, const geom::CoordinateXY &b, const geom::CoordinateXY &c)
Computes the circumcentre of a triangle.
static geom::CoordinateXY intersection(const geom::CoordinateXY &p1, const geom::CoordinateXY &p2, const geom::CoordinateXY &q1, const geom::CoordinateXY &q2)
Wrapper for DoubleDouble higher precision mathematics operations.
Definition: DD.h:108
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25