in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/AbstractConvexPolygon3D.java [404:436]
private List<Vector3D> buildPolygonSplitVertexList(final int enterIdx, final Vector3D newEnterPt,
final int exitIdx, final Vector3D newExitPt, final List<? extends Vector3D> vertices) {
final int size = vertices.size();
final boolean hasNewEnterPt = newEnterPt != null;
final boolean hasNewExitPt = newExitPt != null;
final int startIdx = (hasNewEnterPt ? enterIdx + 1 : enterIdx) % size;
final int endIdx = exitIdx % size;
final boolean hasWrappedIndices = endIdx < startIdx;
final int resultSize = (hasWrappedIndices ? endIdx + size : endIdx) - startIdx + 1;
final List<Vector3D> result = new ArrayList<>(resultSize);
if (hasNewEnterPt) {
result.add(newEnterPt);
}
if (hasWrappedIndices) {
result.addAll(vertices.subList(startIdx, size));
result.addAll(vertices.subList(0, endIdx + 1));
} else {
result.addAll(vertices.subList(startIdx, endIdx + 1));
}
if (hasNewExitPt) {
result.add(newExitPt);
}
return result;
}