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
The following commit(s) were added to refs/heads/master by this push: new 2430135 GEOMETRY-63: fixing Sonarcloud critical bugs 2430135 is described below commit 24301350f8c258ac2c6d72c4ae3f061924a6c0ec Author: Matt Juntunen <matt.juntu...@hotmail.com> AuthorDate: Mon Nov 25 07:43:15 2019 -0500 GEOMETRY-63: fixing Sonarcloud critical bugs --- .../geometry/euclidean/threed/ConvexVolume.java | 26 +++++++-------- .../geometry/euclidean/twod/ConvexArea.java | 38 +++++++++++----------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/ConvexVolume.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/ConvexVolume.java index e772060..985b476 100644 --- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/ConvexVolume.java +++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/ConvexVolume.java @@ -76,10 +76,6 @@ public final class ConvexVolume extends AbstractConvexHyperplaneBoundedRegion<Ve /** {@inheritDoc} */ @Override public Vector3D getBarycenter() { - if (isFull()) { - return null; - } - double volumeSum = 0.0; double sumX = 0.0; @@ -106,16 +102,20 @@ public final class ConvexVolume extends AbstractConvexHyperplaneBoundedRegion<Ve sumZ += scaledVolume * facetBarycenter.getZ(); } - double size = volumeSum / 3.0; + if (volumeSum > 0) { + double size = volumeSum / 3.0; + + // Since the volume we used when adding together the facet contributions + // was 3x the actual pyramid size, we'll multiply by 1/4 here instead + // of 3/4 to adjust for the actual barycenter position in each pyramid. + final double barycenterScale = 1.0 / (4 * size); + return Vector3D.of( + sumX * barycenterScale, + sumY * barycenterScale, + sumZ * barycenterScale); + } - // Since the volume we used when adding together the facet contributions - // was 3x the actual pyramid size, we'll multiply by 1/4 here instead - // of 3/4 to adjust for the actual barycenter position in each pyramid. - final double barycenterScale = 1.0 / (4 * size); - return Vector3D.of( - sumX * barycenterScale, - sumY * barycenterScale, - sumZ * barycenterScale); + return null; } /** {@inheritDoc} */ diff --git a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/ConvexArea.java b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/ConvexArea.java index b152b05..bdc34fa 100644 --- a/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/ConvexArea.java +++ b/commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/twod/ConvexArea.java @@ -121,32 +121,32 @@ public final class ConvexArea extends AbstractConvexHyperplaneBoundedRegion<Vect public Vector2D getBarycenter() { List<Segment> boundaries = getBoundaries(); - if (!boundaries.isEmpty()) { - double quadrilateralAreaSum = 0.0; - double scaledSumX = 0.0; - double scaledSumY = 0.0; + double quadrilateralAreaSum = 0.0; + double scaledSumX = 0.0; + double scaledSumY = 0.0; - double signedArea; - Vector2D startPoint; - Vector2D endPoint; + double signedArea; + Vector2D startPoint; + Vector2D endPoint; - for (Segment seg : boundaries) { - if (seg.isInfinite()) { - // infinite => no barycenter - return null; - } + for (Segment seg : boundaries) { + if (seg.isInfinite()) { + // infinite => no barycenter + return null; + } - startPoint = seg.getStartPoint(); - endPoint = seg.getEndPoint(); + startPoint = seg.getStartPoint(); + endPoint = seg.getEndPoint(); - signedArea = startPoint.signedArea(endPoint); + signedArea = startPoint.signedArea(endPoint); - quadrilateralAreaSum += signedArea; + quadrilateralAreaSum += signedArea; - scaledSumX += signedArea * (startPoint.getX() + endPoint.getX()); - scaledSumY += signedArea * (startPoint.getY() + endPoint.getY()); - } + scaledSumX += signedArea * (startPoint.getX() + endPoint.getX()); + scaledSumY += signedArea * (startPoint.getY() + endPoint.getY()); + } + if (quadrilateralAreaSum > 0) { return Vector2D.of(scaledSumX, scaledSumY).multiply(1.0 / (3.0 * quadrilateralAreaSum)); }