21 #include <geos/export.h>
22 #include <geos/math/DD.h>
28 class CoordinateSequence;
32 using namespace geos::math;
68 const geom::CoordinateXY& p2,
69 const geom::CoordinateXY& q);
72 static int orientationIndex(
double p1x,
double p1y,
73 double p2x,
double p2y,
74 double qx,
double qy);
91 double pax,
double pay,
92 double pbx,
double pby,
93 double pcx,
double pcy)
99 double constexpr DP_SAFE_EPSILON = 1e-15;
102 double const detleft = (pax - pcx) * (pby - pcy);
103 double const detright = (pay - pcy) * (pbx - pcx);
104 double const det = detleft - detright;
107 if(detright <= 0.0) {
108 return orientation(det);
111 detsum = detleft + detright;
114 else if(detleft < 0.0) {
115 if(detright >= 0.0) {
116 return orientation(det);
119 detsum = -detleft - detright;
123 return orientation(det);
126 double const errbound = DP_SAFE_EPSILON * detsum;
127 if((det >= errbound) || (-det >= errbound)) {
128 return orientation(det);
130 return CGAlgorithmsDD::FAILURE;
134 orientation(
double x)
137 return CGAlgorithmsDD::RIGHT;
140 return CGAlgorithmsDD::LEFT;
142 return CGAlgorithmsDD::STRAIGHT;
154 static geom::CoordinateXY
intersection(
const geom::CoordinateXY& p1,
const geom::CoordinateXY& p2,
155 const geom::CoordinateXY& q1,
const geom::CoordinateXY& q2);
157 static int signOfDet2x2(
double dx1,
double dy1,
double dx2,
double dy2);
159 static DD detDD(
double x1,
double y1,
double x2,
double y2);
160 static DD detDD(
const DD& x1,
const DD& y1,
const DD& x2,
const DD& y2);
181 static geom::CoordinateXY
circumcentreDD(
const geom::CoordinateXY& a,
const geom::CoordinateXY& b,
const geom::CoordinateXY& c);
185 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:38
static int orientationIndexFilter(double pax, double pay, double pbx, double pby, double pcx, double pcy)
Definition: CGAlgorithmsDD.h:90
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