Split splitOnIntersection()

in commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/Ray.java [187:210]


    Split<LineConvexSubset> splitOnIntersection(final Line splitter, final Vector2D intersection) {
        final Line line = getLine();
        final Precision.DoubleEquivalence splitterPrecision = splitter.getPrecision();

        final int startCmp = splitterPrecision.compare(splitter.offset(startPoint), 0.0);
        final boolean pointsTowardPlus = splitter.getOffsetDirection().dot(line.getDirection()) >= 0.0;

        if (pointsTowardPlus && startCmp > -1) {
            // entirely on plus side
            return new Split<>(null, this);
        } else if (!pointsTowardPlus && startCmp < 1) {
            // entirely on minus side
            return new Split<>(this, null);
        }

        // we're going to be split
        final Segment splitSeg = new Segment(line, startPoint, intersection);
        final Ray splitRay = new Ray(line, intersection);

        final LineConvexSubset minus = (startCmp > 0) ? splitRay : splitSeg;
        final LineConvexSubset plus = (startCmp > 0) ? splitSeg : splitRay;

        return new Split<>(minus, plus);
    }