in commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractRegionBSPTree.java [746:771]
private void characterizeHyperplaneSubset(final HyperplaneConvexSubset<P> sub,
final AbstractRegionNode<P, N> node, final List<? super HyperplaneConvexSubset<P>> in,
final List<? super HyperplaneConvexSubset<P>> out) {
if (sub != null) {
if (node.isLeaf()) {
if (node.isInside() && in != null) {
in.add(sub);
} else if (node.isOutside() && out != null) {
out.add(sub);
}
} else {
final Split<? extends HyperplaneConvexSubset<P>> split = sub.split(node.getCutHyperplane());
// Continue further on down the subtree with the same subset if the
// subset lies directly on the current node's cut
if (split.getLocation() == SplitLocation.NEITHER) {
characterizeHyperplaneSubset(sub, node.getPlus(), in, out);
characterizeHyperplaneSubset(sub, node.getMinus(), in, out);
} else {
characterizeHyperplaneSubset(split.getPlus(), node.getPlus(), in, out);
characterizeHyperplaneSubset(split.getMinus(), node.getMinus(), in, out);
}
}
}
}