21#include <geos/export.h>
22#include <geos/math/DD.h>
28class CoordinateSequence;
32using namespace geos::math;
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;
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);
189 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 geom::Coordinate circumcentreDD(const geom::Coordinate &a, const geom::Coordinate &b, const geom::Coordinate &c)
Computes the circumcentre of a triangle.
static geom::Coordinate intersection(const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &q1, const geom::Coordinate &q2)
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.
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:58
Wrapper for DoubleDouble higher precision mathematics operations.
Definition: DD.h:107
Basic namespace for all GEOS functionalities.
Definition: geos.h:39