commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Guillaume Marceau (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (MATH-1135) Bug in MonotoneChain: a collinear point prolonging the existing boundary should not be dropped (patch)
Date Thu, 10 Jul 2014 18:08:04 GMT

     [ https://issues.apache.org/jira/browse/MATH-1135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Guillaume Marceau updated MATH-1135:
------------------------------------

    Description: 
MonotoneChain.java attempts to handle the case when a point appears that is prolonging the
line formed by the previous last points and the last point on the chain being constructed.
It code should replace the last point with the new point.



The data points in the test are from a case that showed up before we went to production.

Index: src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
===================================================================
--- src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(revision 1609491)
+++ src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(working copy)
@@ -160,8 +160,8 @@
                 } else {
                     if (distanceToCurrent > distanceToLast) {
                         hull.remove(size - 1);
+                        hull.add(point);
                     }
-                    hull.add(point);
                 }
                 return;
             } else if (offset > 0) {
Index: src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
===================================================================
--- src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(revision 1609491)
+++ src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(working copy)
@@ -204,6 +204,24 @@
     }
 
     @Test
+    public void testCollinnearPointOnExistingBoundary() {
+        final Collection<Vector2D> points = new ArrayList<Vector2D>();
+        points.add(new Vector2D(7.3152, 34.7472));
+        points.add(new Vector2D(6.400799999999997, 34.747199999999985));
+        points.add(new Vector2D(5.486399999999997, 34.7472));
+        points.add(new Vector2D(4.876799999999999, 34.7472));
+        points.add(new Vector2D(4.876799999999999, 34.1376));
+        points.add(new Vector2D(4.876799999999999, 30.48));
+        points.add(new Vector2D(6.0959999999999965, 30.48));
+        points.add(new Vector2D(6.0959999999999965, 34.1376));
+        points.add(new Vector2D(7.315199999999996, 34.1376));
+        points.add(new Vector2D(7.3152, 30.48));
+
+        final ConvexHull2D hull = generator.generate(points);
+        checkConvexHull(points, hull);
+    }
+
+    @Test
     public void testIssue1123() {
 
         List<Vector2D> points = new ArrayList<Vector2D>();


  was:
MonotoneChain.java attempts to handle the case when a point appears between the last and the
previous last points on the chain being constructed, but there is a bug.



The data points in the test are from a case that showed up before we went to production.

Index: src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
===================================================================
--- src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(revision 1609491)
+++ src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(working copy)
@@ -160,8 +160,8 @@
                 } else {
                     if (distanceToCurrent > distanceToLast) {
                         hull.remove(size - 1);
+                        hull.add(point);
                     }
-                    hull.add(point);
                 }
                 return;
             } else if (offset > 0) {
Index: src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
===================================================================
--- src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(revision 1609491)
+++ src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(working copy)
@@ -204,6 +204,24 @@
     }
 
     @Test
+    public void testCollinnearPointOnExistingBoundary() {
+        final Collection<Vector2D> points = new ArrayList<Vector2D>();
+        points.add(new Vector2D(7.3152, 34.7472));
+        points.add(new Vector2D(6.400799999999997, 34.747199999999985));
+        points.add(new Vector2D(5.486399999999997, 34.7472));
+        points.add(new Vector2D(4.876799999999999, 34.7472));
+        points.add(new Vector2D(4.876799999999999, 34.1376));
+        points.add(new Vector2D(4.876799999999999, 30.48));
+        points.add(new Vector2D(6.0959999999999965, 30.48));
+        points.add(new Vector2D(6.0959999999999965, 34.1376));
+        points.add(new Vector2D(7.315199999999996, 34.1376));
+        points.add(new Vector2D(7.3152, 30.48));
+
+        final ConvexHull2D hull = generator.generate(points);
+        checkConvexHull(points, hull);
+    }
+
+    @Test
     public void testIssue1123() {
 
         List<Vector2D> points = new ArrayList<Vector2D>();



> Bug in MonotoneChain: a collinear point prolonging the existing boundary should not be
dropped (patch)
> ------------------------------------------------------------------------------------------------------
>
>                 Key: MATH-1135
>                 URL: https://issues.apache.org/jira/browse/MATH-1135
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.3
>            Reporter: Guillaume Marceau
>            Priority: Minor
>              Labels: patch
>         Attachments: MonotoneChain_testCollinnearPointOnExistingBoundary.patch
>
>
> MonotoneChain.java attempts to handle the case when a point appears that is prolonging
the line formed by the previous last points and the last point on the chain being constructed.
It code should replace the last point with the new point.
> The data points in the test are from a case that showed up before we went to production.
> Index: src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
> ===================================================================
> --- src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(revision 1609491)
> +++ src/main/java/org/apache/commons/math3/geometry/euclidean/twod/hull/MonotoneChain.java
(working copy)
> @@ -160,8 +160,8 @@
>                  } else {
>                      if (distanceToCurrent > distanceToLast) {
>                          hull.remove(size - 1);
> +                        hull.add(point);
>                      }
> -                    hull.add(point);
>                  }
>                  return;
>              } else if (offset > 0) {
> Index: src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
> ===================================================================
> --- src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(revision 1609491)
> +++ src/test/java/org/apache/commons/math3/geometry/euclidean/twod/hull/ConvexHullGenerator2DAbstractTest.java
(working copy)
> @@ -204,6 +204,24 @@
>      }
>  
>      @Test
> +    public void testCollinnearPointOnExistingBoundary() {
> +        final Collection<Vector2D> points = new ArrayList<Vector2D>();
> +        points.add(new Vector2D(7.3152, 34.7472));
> +        points.add(new Vector2D(6.400799999999997, 34.747199999999985));
> +        points.add(new Vector2D(5.486399999999997, 34.7472));
> +        points.add(new Vector2D(4.876799999999999, 34.7472));
> +        points.add(new Vector2D(4.876799999999999, 34.1376));
> +        points.add(new Vector2D(4.876799999999999, 30.48));
> +        points.add(new Vector2D(6.0959999999999965, 30.48));
> +        points.add(new Vector2D(6.0959999999999965, 34.1376));
> +        points.add(new Vector2D(7.315199999999996, 34.1376));
> +        points.add(new Vector2D(7.3152, 30.48));
> +
> +        final ConvexHull2D hull = generator.generate(points);
> +        checkConvexHull(points, hull);
> +    }
> +
> +    @Test
>      public void testIssue1123() {
>  
>          List<Vector2D> points = new ArrayList<Vector2D>();



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message