Repository: commons-math
Updated Branches:
  refs/heads/master 428a48533 -> 10b1c517c


Connect closest node instead of first node below threshold in polygons.

Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/b4fb13bc
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/b4fb13bc
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/b4fb13bc

Branch: refs/heads/master
Commit: b4fb13bca9c41e3e59a5ea8e3f8ec4bc0110ba17
Parents: 428a485
Author: Luc Maisonobe <l...@apache.org>
Authored: Wed Dec 3 10:25:44 2014 +0100
Committer: Luc Maisonobe <l...@apache.org>
Committed: Wed Dec 3 10:25:44 2014 +0100

----------------------------------------------------------------------
 .../geometry/euclidean/twod/PolygonsSet.java    | 23 +++++++++++++-------
 1 file changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-math/blob/b4fb13bc/src/main/java/org/apache/commons/math3/geometry/euclidean/twod/PolygonsSet.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/math3/geometry/euclidean/twod/PolygonsSet.java
 
b/src/main/java/org/apache/commons/math3/geometry/euclidean/twod/PolygonsSet.java
index 8361831..dc3ef33 100644
--- 
a/src/main/java/org/apache/commons/math3/geometry/euclidean/twod/PolygonsSet.java
+++ 
b/src/main/java/org/apache/commons/math3/geometry/euclidean/twod/PolygonsSet.java
@@ -840,18 +840,25 @@ public class PolygonsSet extends 
AbstractRegion<Euclidean2D, Euclidean1D> {
     private int closeVerticesConnections(final List<ConnectableSegment> 
segments) {
         int connected = 0;
         for (final ConnectableSegment segment : segments) {
-            if (segment.getNext() == null) {
+            if (segment.getNext() == null && segment.getEnd() != null) {
                 final Vector2D end = segment.getEnd();
+                ConnectableSegment selectedNext = null;
+                double min = Double.POSITIVE_INFINITY;
                 for (final ConnectableSegment candidateNext : segments) {
-                    if (candidateNext.getPrevious() == null &&
-                        Vector2D.distance(end, candidateNext.getStart()) <= 
getTolerance()) {
-                        // connect the two segments
-                        segment.setNext(candidateNext);
-                        candidateNext.setPrevious(segment);
-                        ++connected;
-                        break;
+                    if (candidateNext.getPrevious() == null && 
candidateNext.getStart() != null) {
+                        final double distance = Vector2D.distance(end, 
candidateNext.getStart());
+                        if (distance < min) {
+                            selectedNext = candidateNext;
+                            min          = distance;
+                        }
                     }
                 }
+                if (min <= getTolerance()) {
+                    // connect the two segments
+                    segment.setNext(selectedNext);
+                    selectedNext.setPrevious(segment);
+                    ++connected;
+                }
             }
         }
         return connected;

Reply via email to