You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2020/01/10 13:11:54 UTC

[commons-geometry] 03/04: GEOMETRY-63: using method references where possible; simplifying logic for AbstractConvexHyperplaneBoundedRegion.splitInternal

This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git

commit 21dcf61e754fe939c4fda845c143d34f0f6c4b13
Author: Matt Juntunen <ma...@hotmail.com>
AuthorDate: Thu Jan 9 22:09:40 2020 -0500

    GEOMETRY-63: using method references where possible; simplifying logic for AbstractConvexHyperplaneBoundedRegion.splitInternal
---
 .../AbstractConvexHyperplaneBoundedRegion.java     | 49 ++++++++++++++--------
 .../euclidean/threed/BoundarySource3D.java         |  2 +-
 .../threed/BoundarySourceLinecaster3D.java         |  3 +-
 .../geometry/euclidean/twod/BoundarySource2D.java  |  2 +-
 .../euclidean/twod/BoundarySourceLinecaster2D.java |  3 +-
 5 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
index bd08b63..116c6a0 100644
--- a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
+++ b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegion.java
@@ -255,29 +255,44 @@ public abstract class AbstractConvexHyperplaneBoundedRegion<P extends Point<P>,
             final List<S> minusBoundaries = new ArrayList<>();
             final List<S> plusBoundaries = new ArrayList<>();
 
-            Split<? extends ConvexSubHyperplane<P>> split;
-            ConvexSubHyperplane<P> minusBoundary;
-            ConvexSubHyperplane<P> plusBoundary;
+            splitBoundaries(splitter, subhpType, minusBoundaries, plusBoundaries);
 
-            for (final S boundary : boundaries) {
-                split = boundary.split(splitter);
+            minusBoundaries.add(subhpType.cast(trimmedSplitter));
+            plusBoundaries.add(subhpType.cast(trimmedSplitter.reverse()));
 
-                minusBoundary = split.getMinus();
-                plusBoundary = split.getPlus();
+            return new Split<>(factory.apply(minusBoundaries), factory.apply(plusBoundaries));
+        }
+    }
 
-                if (minusBoundary != null) {
-                    minusBoundaries.add(subhpType.cast(minusBoundary));
-                }
+    /** Split the boundaries of the region by the given hyperplane, adding the split parts into the
+     * corresponding lists.
+     * @param splitter splitting hyperplane
+     * @param subhpType the type used for the boundary subhyperplanes
+     * @param minusBoundaries list that will contain the portions of the boundaries on the minus side
+     *      of the splitting hyperplane
+     * @param plusBoundaries list that will contain the portions of the boundaries on the plus side of
+     *      the splitting hyperplane
+     */
+    private void splitBoundaries(final Hyperplane<P> splitter, final Class<S> subhpType,
+            final List<S> minusBoundaries, final List<S> plusBoundaries) {
 
-                if (plusBoundary != null) {
-                    plusBoundaries.add(subhpType.cast(plusBoundary));
-                }
-            }
+        Split<? extends ConvexSubHyperplane<P>> split;
+        ConvexSubHyperplane<P> minusBoundary;
+        ConvexSubHyperplane<P> plusBoundary;
 
-            minusBoundaries.add(subhpType.cast(trimmedSplitter));
-            plusBoundaries.add(subhpType.cast(trimmedSplitter.reverse()));
+        for (final S boundary : boundaries) {
+            split = boundary.split(splitter);
 
-            return new Split<>(factory.apply(minusBoundaries), factory.apply(plusBoundaries));
+            minusBoundary = split.getMinus();
+            plusBoundary = split.getPlus();
+
+            if (minusBoundary != null) {
+                minusBoundaries.add(subhpType.cast(minusBoundary));
+            }
+
+            if (plusBoundary != null) {
+                plusBoundaries.add(subhpType.cast(plusBoundary));
+            }
         }
     }
 
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
index 879a22a..47dda36 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySource3D.java
@@ -50,6 +50,6 @@ public interface BoundarySource3D extends BoundarySource<Facet> {
      * @return a boundary source containing the given boundaries
      */
     static BoundarySource3D from(final Collection<Facet> boundaries) {
-        return () -> boundaries.stream();
+        return boundaries::stream;
     }
 }
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
index 43a7399..89dce03 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/BoundarySourceLinecaster3D.java
@@ -18,6 +18,7 @@ package org.apache.commons.geometry.euclidean.threed;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,7 +66,7 @@ final class BoundarySourceLinecaster3D implements Linecastable3D {
     private Stream<LinecastPoint3D> getIntersectionStream(final Segment3D segment) {
         return boundarySrc.boundaryStream()
                 .map(boundary -> computeIntersection(boundary, segment))
-                .filter(intersection -> intersection != null);
+                .filter(Objects::nonNull);
     }
 
     /** Compute the intersection between a boundary facet and linecast intersecting segment. Null is
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
index a4e5ae5..561b144 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySource2D.java
@@ -50,6 +50,6 @@ public interface BoundarySource2D extends BoundarySource<Segment> {
      * @return a boundary source containing the given boundaries
      */
     static BoundarySource2D from(final Collection<Segment> boundaries) {
-        return () -> boundaries.stream();
+        return boundaries::stream;
     }
 }
diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
index bf4133d..612c6a1 100644
--- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
+++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/BoundarySourceLinecaster2D.java
@@ -18,6 +18,7 @@ package org.apache.commons.geometry.euclidean.twod;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,7 +66,7 @@ final class BoundarySourceLinecaster2D implements Linecastable2D {
     private Stream<LinecastPoint2D> getIntersectionStream(final Segment segment) {
         return boundarySrc.boundaryStream()
                 .map(boundary -> computeIntersection(boundary, segment))
-                .filter(intersection -> intersection != null);
+                .filter(Objects::nonNull);
     }
 
     /** Compute the intersection between a boundary segment and linecast intersecting segment. Null is