20 #ifndef GEOS_ALGORITHM_LINEINTERSECTOR_H 21 #define GEOS_ALGORITHM_LINEINTERSECTOR_H 23 #include <geos/export.h> 26 #include <geos/geom/Coordinate.h> 83 precisionModel(initialPrecisionModel),
97 bool isInteriorIntersection();
106 bool isInteriorIntersection(
size_t inputLineIndex);
117 precisionModel = newPM;
136 POINT_INTERSECTION = 1,
139 COLLINEAR_INTERSECTION = 2
146 std::string toString()
const;
156 return result != NO_INTERSECTION;
179 return intPt[intIndex];
186 static bool isSameSignAndNonZero(
double a,
double b);
217 return hasIntersection() && isProperVar;
230 const geom::Coordinate& getIntersectionAlongSegment(
size_t segmentIndex,
size_t intIndex);
241 size_t getIndexAlongSegment(
size_t segmentIndex,
size_t intIndex);
252 double getEdgeDistance(
size_t geomIndex,
size_t intIndex)
const;
276 size_t intLineIndex[2][2];
285 return result == COLLINEAR_INTERSECTION;
294 return hasIntersection() && !isProperVar;
297 void computeIntLineIndex();
299 void computeIntLineIndex(
size_t segmentIndex);
301 uint8_t computeCollinearIntersection(
const geom::Coordinate& p1,
const geom::Coordinate& p2,
302 const geom::Coordinate& q1,
const geom::Coordinate& q2);
313 geom::Coordinate intersection(
const geom::Coordinate& p1,
314 const geom::Coordinate& p2,
315 const geom::Coordinate& q1,
316 const geom::Coordinate& q2)
const;
328 bool isInSegmentEnvelopes(
const geom::Coordinate& intPt)
const;
343 geom::Coordinate intersectionSafe(
const geom::Coordinate& p1,
const geom::Coordinate& p2,
344 const geom::Coordinate& q1,
const geom::Coordinate& q2)
const;
365 static geom::Coordinate nearestEndpoint(
const geom::Coordinate& p1,
366 const geom::Coordinate& p2,
367 const geom::Coordinate& q1,
368 const geom::Coordinate& q2);
370 static double zGet(
const geom::Coordinate& p,
const geom::Coordinate& q);
372 static double zGetOrInterpolate(
const geom::Coordinate& p,
373 const geom::Coordinate& p0,
374 const geom::Coordinate& p1);
376 static geom::Coordinate zGetOrInterpolateCopy(
const geom::Coordinate& p,
377 const geom::Coordinate& p0,
378 const geom::Coordinate& p1);
383 static double zInterpolate(
const geom::Coordinate& p,
384 const geom::Coordinate& p0,
385 const geom::Coordinate& p1);
387 static double zInterpolate(
const geom::Coordinate& p,
388 const geom::Coordinate& p1,
389 const geom::Coordinate& p2,
390 const geom::Coordinate& q1,
391 const geom::Coordinate& q2);
400 #endif // GEOS_ALGORITHM_LINEINTERSECTOR_H size_t getIntersectionNum() const
Definition: LineIntersector.h:164
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:87
intersection_type
Definition: LineIntersector.h:131
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition: LineIntersector.h:49
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:26
bool isProper() const
Tests whether an intersection is proper.
Definition: LineIntersector.h:215
bool hasIntersection() const
Definition: LineIntersector.h:154
void setPrecisionModel(const geom::PrecisionModel *newPM)
Definition: LineIntersector.h:115
const geom::Coordinate & getIntersection(size_t intIndex) const
Definition: LineIntersector.h:177