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