in commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractBSPTree.java [338:354]
protected N findNode(final N start, final P pt, final FindNodeCutRule cutRule) {
final Hyperplane<P> cutHyper = start.getCutHyperplane();
if (cutHyper != null) {
final HyperplaneLocation cutLoc = cutHyper.classify(pt);
final boolean onPlusSide = cutLoc == HyperplaneLocation.PLUS;
final boolean onMinusSide = cutLoc == HyperplaneLocation.MINUS;
final boolean onCut = !onPlusSide && !onMinusSide;
if (onMinusSide || (onCut && cutRule == FindNodeCutRule.MINUS)) {
return findNode(start.getMinus(), pt, cutRule);
} else if (onPlusSide || cutRule == FindNodeCutRule.PLUS) {
return findNode(start.getPlus(), pt, cutRule);
}
}
return start;
}