in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/ReverseRay.java [182:205]
protected Split<LineConvexSubset> splitOnIntersection(final Line splitter, final Vector2D intersection) {
final Line line = getLine();
final Precision.DoubleEquivalence splitterPrecision = splitter.getPrecision();
final int endCmp = splitterPrecision.compare(splitter.offset(endPoint), 0.0);
final boolean pointsTowardPlus = splitter.getOffsetDirection().dot(line.getDirection()) >= 0.0;
if (pointsTowardPlus && endCmp < 1) {
// entirely on minus side
return new Split<>(this, null);
} else if (!pointsTowardPlus && endCmp > -1) {
// entirely on plus side
return new Split<>(null, this);
}
// we're going to be split
final Segment splitSeg = new Segment(line, intersection, endPoint);
final ReverseRay splitRevRay = new ReverseRay(line, intersection);
final LineConvexSubset minus = (endCmp > 0) ? splitRevRay : splitSeg;
final LineConvexSubset plus = (endCmp > 0) ? splitSeg : splitRevRay;
return new Split<>(minus, plus);
}