in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubset.java [176:209]
public Split<EmbeddedTreeLineSubset> split(final Hyperplane<Vector2D> splitter) {
final Line thisLine = getLine();
final Line splitterLine = (Line) splitter;
final Precision.DoubleEquivalence precision = getPrecision();
final Vector2D intersection = splitterLine.intersection(thisLine);
if (intersection == null) {
return getNonIntersectingSplitResult(splitterLine, this);
}
final double abscissa = thisLine.abscissa(intersection);
final OrientedPoint subspaceSplitter = OrientedPoints.fromLocationAndDirection(
abscissa,
splitterPlusIsPositiveFacing(splitterLine),
precision);
final Split<RegionBSPTree1D> subspaceSplit = region.split(subspaceSplitter);
final SplitLocation subspaceSplitLoc = subspaceSplit.getLocation();
if (SplitLocation.MINUS == subspaceSplitLoc) {
return new Split<>(this, null);
} else if (SplitLocation.PLUS == subspaceSplitLoc) {
return new Split<>(null, this);
}
final EmbeddedTreeLineSubset minus = (subspaceSplit.getMinus() != null) ?
new EmbeddedTreeLineSubset(thisLine, subspaceSplit.getMinus()) :
null;
final EmbeddedTreeLineSubset plus = (subspaceSplit.getPlus() != null) ?
new EmbeddedTreeLineSubset(thisLine, subspaceSplit.getPlus()) :
null;
return new Split<>(minus, plus);
}