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));
         }
 

Reply via email to