20 #ifndef GEOS_ALGORITHM_LINEINTERSECTOR_H 21 #define GEOS_ALGORITHM_LINEINTERSECTOR_H 23 #include <geos/inline.h> 24 #include <geos/export.h> 27 #include <geos/geom/Coordinate.h> 84 precisionModel(initialPrecisionModel),
98 bool isInteriorIntersection();
107 bool isInteriorIntersection(std::size_t inputLineIndex);
118 precisionModel = newPM;
137 POINT_INTERSECTION = 1,
140 COLLINEAR_INTERSECTION = 2
147 std::string toString()
const;
157 return result != NO_INTERSECTION;
171 return inputLines[segmentIndex][ptIndex];
194 return intPt[intIndex];
201 static bool isSameSignAndNonZero(
double a,
double b);
232 return hasIntersection() && isProperVar;
245 const geom::Coordinate& getIntersectionAlongSegment(std::size_t segmentIndex, std::size_t intIndex);
256 std::size_t getIndexAlongSegment(std::size_t segmentIndex, std::size_t intIndex);
267 double getEdgeDistance(std::size_t geomIndex, std::size_t intIndex)
const;
291 std::size_t intLineIndex[2][2];
300 return result == COLLINEAR_INTERSECTION;
309 return hasIntersection() && !isProperVar;
312 void computeIntLineIndex();
314 void computeIntLineIndex(std::size_t segmentIndex);
316 uint8_t computeCollinearIntersection(
const geom::Coordinate& p1,
const geom::Coordinate& p2,
317 const geom::Coordinate& q1,
const geom::Coordinate& q2);
328 geom::Coordinate intersection(
const geom::Coordinate& p1,
329 const geom::Coordinate& p2,
330 const geom::Coordinate& q1,
331 const geom::Coordinate& q2)
const;
343 bool isInSegmentEnvelopes(
const geom::Coordinate& intPt)
const;
358 geom::Coordinate intersectionSafe(
const geom::Coordinate& p1,
const geom::Coordinate& p2,
359 const geom::Coordinate& q1,
const geom::Coordinate& q2)
const;
380 static geom::Coordinate nearestEndpoint(
const geom::Coordinate& p1,
381 const geom::Coordinate& p2,
382 const geom::Coordinate& q1,
383 const geom::Coordinate& q2);
385 static double zGet(
const geom::Coordinate& p,
const geom::Coordinate& q);
387 static double zGetOrInterpolate(
const geom::Coordinate& p,
388 const geom::Coordinate& p0,
389 const geom::Coordinate& p1);
391 static geom::Coordinate zGetOrInterpolateCopy(
const geom::Coordinate& p,
392 const geom::Coordinate& p0,
393 const geom::Coordinate& p1);
398 static double zInterpolate(
const geom::Coordinate& p,
399 const geom::Coordinate& p0,
400 const geom::Coordinate& p1);
402 static double zInterpolate(
const geom::Coordinate& p,
403 const geom::Coordinate& p1,
404 const geom::Coordinate& p2,
405 const geom::Coordinate& q1,
406 const geom::Coordinate& q2);
415 # include "geos/algorithm/LineIntersector.inl" 418 #endif // GEOS_ALGORITHM_LINEINTERSECTOR_H size_t getIntersectionNum() const
Definition: LineIntersector.h:179
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
const geom::Coordinate * getEndpoint(std::size_t segmentIndex, std::size_t ptIndex) const
Definition: LineIntersector.h:169
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
intersection_type
Definition: LineIntersector.h:132
const geom::Coordinate & getIntersection(std::size_t intIndex) const
Definition: LineIntersector.h:192
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition: LineIntersector.h:50
Basic namespace for all GEOS functionalities.
Definition: Angle.h:26
bool isProper() const
Tests whether an intersection is proper.
Definition: LineIntersector.h:230
bool hasIntersection() const
Definition: LineIntersector.h:155
void setPrecisionModel(const geom::PrecisionModel *newPM)
Definition: LineIntersector.h:116