public LinePath simplify()

in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/path/LinePath.java [221:268]


    public LinePath simplify() {
        final List<LineConvexSubset> simplified = new ArrayList<>();

        final int size = elements.size();

        LineConvexSubset current;
        Line currentLine;
        double end;

        int idx = 0;
        int testIdx;
        while (idx < size) {
            current = elements.get(idx);
            currentLine = current.getLine();
            end = current.getSubspaceEnd();

            // try to combine with forward neighbors
            testIdx = idx + 1;
            while (testIdx < size && currentLine.equals(elements.get(testIdx).getLine())) {
                end = Math.max(end, elements.get(testIdx).getSubspaceEnd());
                ++testIdx;
            }

            if (testIdx > idx + 1) {
                // we found something to merge
                simplified.add(Lines.subsetFromInterval(currentLine, current.getSubspaceStart(), end));
            } else {
                simplified.add(current);
            }

            idx = testIdx;
        }

        // combine the first and last items if needed
        if (isClosed() && simplified.size() > 2 && simplified.get(0).getLine().equals(
                simplified.get(simplified.size() - 1).getLine())) {

            final LineConvexSubset startElement = simplified.get(0);
            final LineConvexSubset endElement = simplified.remove(simplified.size() - 1);

            final LineConvexSubset combined = Lines.subsetFromInterval(
                    endElement.getLine(), endElement.getSubspaceStart(), startElement.getSubspaceEnd());

            simplified.set(0, combined);
        }

        return new SimplifiedLinePath(simplified);
    }