[
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)