public class RobustLineIntersector extends LineIntersector
LineIntersector
.COLLINEAR, COLLINEAR_INTERSECTION, DO_INTERSECT, DONT_INTERSECT, inputLines, intLineIndex, intPt, isProper, NO_INTERSECTION, pa, pb, POINT_INTERSECTION, precisionModel, result
Constructor and Description |
---|
RobustLineIntersector() |
Modifier and Type | Method and Description |
---|---|
private void |
checkDD(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2,
Coordinate intPt) |
private int |
computeCollinearIntersection(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2) |
protected int |
computeIntersect(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2) |
void |
computeIntersection(Coordinate p,
Coordinate p1,
Coordinate p2)
Compute the intersection of a point p and the line p1-p2.
|
private Coordinate |
intersection(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2)
This method computes the actual value of the intersection point.
|
private Coordinate |
intersectionWithNormalization(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2) |
private boolean |
isInSegmentEnvelopes(Coordinate intPt)
Tests whether a point lies in the envelopes of both input segments.
|
private static Coordinate |
nearestEndpoint(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2)
Finds the endpoint of the segments P and Q which
is closest to the other segment.
|
private void |
normalizeToEnvCentre(Coordinate n00,
Coordinate n01,
Coordinate n10,
Coordinate n11,
Coordinate normPt)
Normalize the supplied coordinates to
so that the midpoint of their intersection envelope
lies at the origin.
|
private void |
normalizeToMinimum(Coordinate n1,
Coordinate n2,
Coordinate n3,
Coordinate n4,
Coordinate normPt)
Normalize the supplied coordinates so that
their minimum ordinate values lie at the origin.
|
private Coordinate |
safeHCoordinateIntersection(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2)
Computes a segment intersection using homogeneous coordinates.
|
private double |
smallestInAbsValue(double x1,
double x2,
double x3,
double x4) |
computeEdgeDistance, computeIntersection, computeIntLineIndex, computeIntLineIndex, getEdgeDistance, getEndpoint, getIndexAlongSegment, getIntersection, getIntersectionAlongSegment, getIntersectionNum, hasIntersection, isCollinear, isEndPoint, isInteriorIntersection, isInteriorIntersection, isIntersection, isProper, nonRobustComputeEdgeDistance, setMakePrecise, setPrecisionModel, toString
public void computeIntersection(Coordinate p, Coordinate p1, Coordinate p2)
LineIntersector
p
.computeIntersection
in class LineIntersector
protected int computeIntersect(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
computeIntersect
in class LineIntersector
private int computeCollinearIntersection(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
private Coordinate intersection(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
private void checkDD(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2, Coordinate intPt)
private Coordinate intersectionWithNormalization(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
private Coordinate safeHCoordinateIntersection(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
p1
- a segment endpointp2
- a segment endpointq1
- a segment endpointq2
- a segment endpointprivate void normalizeToMinimum(Coordinate n1, Coordinate n2, Coordinate n3, Coordinate n4, Coordinate normPt)
n1
- n2
- n3
- n4
- normPt
- private void normalizeToEnvCentre(Coordinate n00, Coordinate n01, Coordinate n10, Coordinate n11, Coordinate normPt)
n00
- n01
- n10
- n11
- normPt
- private double smallestInAbsValue(double x1, double x2, double x3, double x4)
private boolean isInSegmentEnvelopes(Coordinate intPt)
true
for this test.
Since this test is for debugging purposes only, no attempt is
made to optimize the envelope test.true
if the input point lies within both input segment envelopesprivate static Coordinate nearestEndpoint(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
This replaces the older CentralEndpoint heuristic, which chose the wrong endpoint in some cases where the segments had very distinct slopes and one endpoint lay almost on the other segment.
p1
- an endpoint of segment Pp2
- an endpoint of segment Pq1
- an endpoint of segment Qq2
- an endpoint of segment Q