1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.hipparchus.geometry.euclidean.twod;
23
24 import org.hipparchus.geometry.enclosing.EnclosingBall;
25 import org.hipparchus.random.RandomGenerator;
26 import org.hipparchus.random.UnitSphereRandomVectorGenerator;
27 import org.hipparchus.random.Well1024a;
28 import org.junit.jupiter.api.Test;
29
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.List;
33
34 import static org.junit.jupiter.api.Assertions.assertEquals;
35 import static org.junit.jupiter.api.Assertions.assertFalse;
36 import static org.junit.jupiter.api.Assertions.assertTrue;
37
38
39 class DiskGeneratorTest {
40
41 @Test
42 void testSupport0Point() {
43 List<Vector2D> support = Arrays.asList(new Vector2D[0]);
44 EnclosingBall<Euclidean2D, Vector2D> disk = new DiskGenerator().ballOnSupport(support);
45 assertTrue(disk.getRadius() < 0);
46 assertEquals(0, disk.getSupportSize());
47 assertEquals(0, disk.getSupport().length);
48 }
49
50 @Test
51 void testSupport1Point() {
52 List<Vector2D> support = Arrays.asList(new Vector2D(1, 2));
53 EnclosingBall<Euclidean2D, Vector2D> disk = new DiskGenerator().ballOnSupport(support);
54 assertEquals(0.0, disk.getRadius(), 1.0e-10);
55 assertTrue(disk.contains(support.get(0)));
56 assertTrue(disk.contains(support.get(0), 0.5));
57 assertFalse(disk.contains(new Vector2D(support.get(0).getX() + 0.1,
58 support.get(0).getY() - 0.1),
59 0.001));
60 assertTrue(disk.contains(new Vector2D(support.get(0).getX() + 0.1,
61 support.get(0).getY() - 0.1),
62 0.5));
63 assertEquals(0, support.get(0).distance(disk.getCenter()), 1.0e-10);
64 assertEquals(1, disk.getSupportSize());
65 assertTrue(support.get(0) == disk.getSupport()[0]);
66 }
67
68 @Test
69 void testSupport2Points() {
70 List<Vector2D> support = Arrays.asList(new Vector2D(1, 0),
71 new Vector2D(3, 0));
72 EnclosingBall<Euclidean2D, Vector2D> disk = new DiskGenerator().ballOnSupport(support);
73 assertEquals(1.0, disk.getRadius(), 1.0e-10);
74 int i = 0;
75 for (Vector2D v : support) {
76 assertTrue(disk.contains(v));
77 assertEquals(1.0, v.distance(disk.getCenter()), 1.0e-10);
78 assertTrue(v == disk.getSupport()[i++]);
79 }
80 assertTrue(disk.contains(new Vector2D(2, 0.9)));
81 assertFalse(disk.contains(Vector2D.ZERO));
82 assertEquals(0.0, new Vector2D(2, 0).distance(disk.getCenter()), 1.0e-10);
83 assertEquals(2, disk.getSupportSize());
84 }
85
86 @Test
87 void testSupport3Points() {
88 List<Vector2D> support = Arrays.asList(new Vector2D(1, 0),
89 new Vector2D(3, 0),
90 new Vector2D(2, 2));
91 EnclosingBall<Euclidean2D, Vector2D> disk = new DiskGenerator().ballOnSupport(support);
92 assertEquals(5.0 / 4.0, disk.getRadius(), 1.0e-10);
93 int i = 0;
94 for (Vector2D v : support) {
95 assertTrue(disk.contains(v));
96 assertEquals(5.0 / 4.0, v.distance(disk.getCenter()), 1.0e-10);
97 assertTrue(v == disk.getSupport()[i++]);
98 }
99 assertTrue(disk.contains(new Vector2D(2, 0.9)));
100 assertFalse(disk.contains(new Vector2D(0.9, 0)));
101 assertFalse(disk.contains(new Vector2D(3.1, 0)));
102 assertTrue(disk.contains(new Vector2D(2.0, -0.499)));
103 assertFalse(disk.contains(new Vector2D(2.0, -0.501)));
104 assertEquals(0.0, new Vector2D(2.0, 3.0 / 4.0).distance(disk.getCenter()), 1.0e-10);
105 assertEquals(3, disk.getSupportSize());
106 }
107
108 @Test
109 void testRandom() {
110 final RandomGenerator random = new Well1024a(0x12faa818373ffe90l);
111 final UnitSphereRandomVectorGenerator sr = new UnitSphereRandomVectorGenerator(2, random);
112 for (int i = 0; i < 500; ++i) {
113 double d = 25 * random.nextDouble();
114 double refRadius = 10 * random.nextDouble();
115 Vector2D refCenter = new Vector2D(d, new Vector2D(sr.nextVector()));
116 List<Vector2D> support = new ArrayList<Vector2D>();
117 for (int j = 0; j < 3; ++j) {
118 support.add(new Vector2D(1.0, refCenter, refRadius, new Vector2D(sr.nextVector())));
119 }
120 EnclosingBall<Euclidean2D, Vector2D> disk = new DiskGenerator().ballOnSupport(support);
121 assertEquals(0.0, refCenter.distance(disk.getCenter()), 3e-9 * refRadius);
122 assertEquals(refRadius, disk.getRadius(), 7e-10 * refRadius);
123 }
124
125 }
126 }