[
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 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>();
was:
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>();
> MonotoneChain does not handle the case of a collinear point on the existing
> boundary correctly (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 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>();
--
This message was sent by Atlassian JIRA
(v6.2#6252)