20#include <geos/export.h>
21#include <geos/algorithm/LineIntersector.h>
22#include <geos/geom/Coordinate.h>
23#include <geos/geom/CircularArc.h>
27class GEOS_DLL CircularArcIntersector {
29 using CoordinateXY = geom::CoordinateXY;
30 using CoordinateXYZM = geom::CoordinateXYZM;
31 using CircularArc = geom::CircularArc;
32 using Envelope = geom::Envelope;
34 enum intersection_type : uint8_t {
36 ONE_POINT_INTERSECTION = 1,
37 TWO_POINT_INTERSECTION = 2,
38 COCIRCULAR_INTERSECTION = 3,
41 explicit CircularArcIntersector(
const geom::PrecisionModel* pm =
nullptr)
45 intersection_type getResult()
const
50 const CoordinateXYZM& getPoint(std::uint8_t i)
const
55 const CircularArc& getArc(std::uint8_t i)
const
60 std::uint8_t getNumPoints()
const
65 std::uint8_t getNumArcs()
const
81 void intersects(
const CircularArc& arc,
const geom::CoordinateSequence& seq, std::size_t pos0, std::size_t pos1,
bool useSegEndpoints);
88 void intersects(
const CircularArc& arc1,
const CircularArc& arc2);
95 void intersects(
const geom::CoordinateSequence& p, std::size_t p0, std::size_t p1,
96 const geom::CoordinateSequence& q, std::size_t q0, std::size_t q1);
110 void addCocircularIntersection(
double startAngle,
double endAngle,
int orientation,
const CircularArc& arc1,
const CircularArc& arc2);
120 void addArcArcIntersectionPoint(
const CoordinateXY& computedIntPt,
const CircularArc& arc1,
const CircularArc& arc2);
130 void addArcSegmentIntersectionPoint(
const CoordinateXY& computedIntPt,
const CircularArc& lhs,
131 const geom::CoordinateSequence& seq, std::size_t pos0, std::size_t pos1,
bool useSegEndpoints);
144 circleIntersects(
const CoordinateXY& center,
double r,
const CoordinateXY& p0,
const CoordinateXY& p1, CoordinateXY& isect0, CoordinateXY& isect1);
146 void computeCocircularIntersection(
const CircularArc& arc1,
const CircularArc& arc2);
149 bool hasIntersection(
const geom::CoordinateXY& p)
const;
151 std::array<CoordinateXYZM, 2> intPt;
152 std::array<CircularArc, 2> intArc;
153 const geom::PrecisionModel* precisionModel;
154 intersection_type result = NO_INTERSECTION;
155 std::uint8_t nPt = 0;
156 std::uint8_t nArc = 0;
Contains classes and interfaces implementing fundamental computational geometry algorithms.
Definition Angle.h:32