1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.geometry.hull;
18
19 import java.util.Arrays;
20 import java.util.List;
21
22 import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
23 import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
24 import org.apache.commons.geometry.euclidean.EuclideanTestUtils;
25 import org.apache.commons.geometry.euclidean.twod.ConvexArea;
26 import org.apache.commons.geometry.euclidean.twod.Vector2D;
27 import org.apache.commons.geometry.hull.euclidean.twod.ConvexHull2D;
28 import org.apache.commons.geometry.hull.euclidean.twod.MonotoneChain;
29 import org.junit.Assert;
30 import org.junit.Test;
31
32
33
34
35 public class DocumentationExamplesTest {
36
37 private static final double TEST_EPS = 1e-15;
38
39 @Test
40 public void testMonotoneChainExample() {
41 final DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-10);
42
43
44 final List<Vector2D> pts = Arrays.asList(
45 Vector2D.ZERO,
46 Vector2D.of(0.5, 0.5),
47 Vector2D.of(0, 0.5),
48 Vector2D.of(0, 1),
49 Vector2D.of(0.25, 0.1),
50 Vector2D.of(1, 0),
51 Vector2D.of(1, 1),
52 Vector2D.of(0.75, 0.9)
53 );
54
55
56 final MonotoneChain mc = new MonotoneChain(precision);
57
58
59 final ConvexHull2D hull = mc.generate(pts);
60
61
62 final List<Vector2D> vertices = hull.getVertices();
63
64
65 final ConvexArea region = hull.getRegion();
66 final boolean containsAll = pts.stream().allMatch(region::contains);
67
68
69 Assert.assertEquals(4, vertices.size());
70 EuclideanTestUtils.assertCoordinatesEqual(Vector2D.ZERO, vertices.get(0), TEST_EPS);
71 EuclideanTestUtils.assertCoordinatesEqual(Vector2D.of(1, 0), vertices.get(1), TEST_EPS);
72 EuclideanTestUtils.assertCoordinatesEqual(Vector2D.of(1, 1), vertices.get(2), TEST_EPS);
73 EuclideanTestUtils.assertCoordinatesEqual(Vector2D.of(0, 1), vertices.get(3), TEST_EPS);
74
75 Assert.assertTrue(containsAll);
76 }
77 }