GEOS 3.15.0dev
CircularArcs.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2024 ISciences, LLC
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#pragma once
16
17#include <geos/export.h>
18#include <geos/geom/Coordinate.h>
19
20#include <array>
21#include <optional>
22
23namespace geos {
24namespace geom {
25class CoordinateSequence;
26class Envelope;
27}
28}
29
30namespace geos {
31namespace algorithm {
32
33class GEOS_DLL CircularArcs {
34public:
35
37 static geom::CoordinateXY getCenter(const geom::CoordinateXY& p0, const geom::CoordinateXY& p1,
38 const geom::CoordinateXY& p2);
39
40 static double getAngle(const geom::CoordinateXY& pt, const geom::CoordinateXY& center);
41
42 static geom::CoordinateXY getDirectionPoint(const geom::CoordinateXY& center, double radius, double theta, bool isCCW);
43
44 static double getMidpointAngle(double theta0, double theta2, bool isCCW);
45
46 static geom::CoordinateXY getMidpoint(const geom::CoordinateXY& p0, const geom::CoordinateXY& p2, const geom::CoordinateXY& center, double radius, bool isCCW);
47
49 static void expandEnvelope(geom::Envelope& e, const geom::CoordinateXY& p0, const geom::CoordinateXY& p1,
50 const geom::CoordinateXY& p2);
51
53 static geom::CoordinateXY createPoint(const geom::CoordinateXY& center, double radius, double theta);
54
65 static void interpolateZM(const geom::CoordinateSequence &seq, size_t i0, const geom::CoordinateXY &center, bool isCCW, geom::CoordinateXY &pt, double
66 &z, double &m);
67
78 static int
79 circleIntersectsSegment(const geom::CoordinateXY& center, double r,
80 const geom::CoordinateXY& p0, const geom::CoordinateXY& p1,
81 geom::CoordinateXY& isect0, geom::CoordinateXY& isect1);
82
91 static bool
92 containsAngle(double t0, double t2, bool isCCW, double theta);
93
104 static bool
105 containsPointOnCircle(const geom::CoordinateXY& center,
106 const geom::CoordinateXY& p0, const geom::CoordinateXY& p2, bool isCCW,
107 const geom::CoordinateXY& q);
108
119 static double
120 distanceArcPoint(const geom::CoordinateXY& c, double r,
121 const geom::CoordinateXY& p0, const geom::CoordinateXY& p2, bool isCCW,
122 const geom::CoordinateXY& q);
123
134 static double
135 distanceArcSegment(const geom::CoordinateXY& c, double r,
136 const geom::CoordinateXY& p0, const geom::CoordinateXY& p2, bool isCCW,
137 const geom::CoordinateXY& q0, const geom::CoordinateXY& q1);
138
153 static double
154 distanceArcArc(const geom::CoordinateXY& ca, double ra,
155 const geom::CoordinateXY& a0, const geom::CoordinateXY& a2, bool aCCW,
156 const geom::CoordinateXY& cb, double rb,
157 const geom::CoordinateXY& b0, const geom::CoordinateXY& b2, bool bCCW);
158
169 static geom::CoordinateXY
170 closestPointArcPoint(const geom::CoordinateXY& c, double r,
171 const geom::CoordinateXY& p0, const geom::CoordinateXY& p2,
172 bool isCCW, const geom::CoordinateXY &q);
173
185 static std::array<geom::CoordinateXY, 2>
186 closestPointsArcSegment(const geom::CoordinateXY& c, double r,
187 const geom::CoordinateXY& p0, const geom::CoordinateXY& p2, bool isCCW, const geom::CoordinateXY& q0, const geom::CoordinateXY& q1);
188
189
204 static std::array<geom::CoordinateXY, 2> closestPointsArcArc(const geom::CoordinateXY& ca,
205 double ra,
206 const geom::CoordinateXY& a0,
207 const geom::CoordinateXY& a2,
208 bool aCCW,
209 const geom::CoordinateXY& cb,
210 double rb,
211 const geom::CoordinateXY& b0,
212 const geom::CoordinateXY& b2,
213 bool bCCW);
214
229 static std::optional<geom::CoordinateXY>
230 cocircularArcsIntersectionPoint(const geom::CoordinateXY& center, double radius,
231 const geom::CoordinateXY& a0, const geom::CoordinateXY& a2, bool aCCW,
232 const geom::CoordinateXY& b0, const geom::CoordinateXY& b2, bool bCCW);
233
250 static std::optional<geom::CoordinateXY>
251 arcIntersectionPoint(const geom::CoordinateXY& ca, double ra,
252 const geom::CoordinateXY& a0, const geom::CoordinateXY& a2, bool aCCW,
253 const geom::CoordinateXY& cb, double rb,
254 const geom::CoordinateXY& b0, const geom::CoordinateXY& b2, bool bCCW);
255
256};
257}
258}
Basic namespace for all GEOS functionalities.
Definition geos.h:38