GEOS 3.9.1
CGAlgorithmsDD.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2014 Mateusz Loskot <mateusz@loskot.net>
7 *
8 * This is free software; you can redistribute and/or modify it under
9 * the terms of the GNU Lesser General Public Licence as published
10 * by the Free Software Foundation.
11 * See the COPYING file for more information.
12 *
13 **********************************************************************
14 *
15 * Last port: algorithm/CGAlgorithmsDD.java r789 (JTS-1.14)
16 *
17 **********************************************************************/
18
19#ifndef GEOS_ALGORITHM_CGALGORITHMDD_H
20#define GEOS_ALGORITHM_CGALGORITHMDD_H
21#include <geos/export.h>
22#include <geos/math/DD.h>
23
24// Forward declarations
25namespace geos {
26namespace geom {
27class Coordinate;
28class CoordinateSequence;
29}
30}
31
32using namespace geos::math;
33
34namespace geos {
35namespace algorithm { // geos::algorithm
36
38class GEOS_DLL CGAlgorithmsDD {
39
40public:
41
42 enum {
43 CLOCKWISE = -1,
44 COLLINEAR = 0,
45 COUNTERCLOCKWISE = 1
46 };
47
48 enum {
49 RIGHT = -1,
50 LEFT = 1,
51 STRAIGHT = 0,
52 FAILURE = 2
53 };
54
67 static int orientationIndex(const geom::Coordinate& p1,
68 const geom::Coordinate& p2,
69 const geom::Coordinate& q);
70
71
72 static int orientationIndex(double p1x, double p1y,
73 double p2x, double p2y,
74 double qx, double qy);
75
90 static int orientationIndexFilter(double pax, double pay,
91 double pbx, double pby,
92 double pcx, double pcy);
93
94
95 static int
96 orientation(double x)
97 {
98 if(x < 0) {
99 return CGAlgorithmsDD::RIGHT;
100 }
101 if(x > 0) {
102 return CGAlgorithmsDD::LEFT;
103 }
104 return CGAlgorithmsDD::STRAIGHT;
105 }
106
117 const geom::Coordinate& q1, const geom::Coordinate& q2);
118
119 static int signOfDet2x2(double dx1, double dy1, double dx2, double dy2);
120
121 static DD detDD(double x1, double y1, double x2, double y2);
122 static DD detDD(const DD& x1, const DD& y1, const DD& x2, const DD& y2);
123
148
149protected:
150
151 static int signOfDet2x2(const DD& x1, const DD& y1, const DD& x2, const DD& y2);
152
153};
154
155} // namespace geos::algorithm
156} // namespace geos
157
158#endif // GEOS_ALGORITHM_CGALGORITHM_H
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)
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:60
Wrapper for DoubleDouble higher precision mathematics operations.
Definition DD.h:108
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:26