Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/core/misc/java/test/RotatedRectTest.java
16354 views
1
package org.opencv.test.core;
2
3
import org.opencv.core.CvType;
4
import org.opencv.core.Point;
5
import org.opencv.core.Rect;
6
import org.opencv.core.RotatedRect;
7
import org.opencv.core.MatOfRotatedRect;
8
import org.opencv.core.Size;
9
import org.opencv.test.OpenCVTestCase;
10
11
import java.util.Arrays;
12
import java.util.List;
13
14
public class RotatedRectTest extends OpenCVTestCase {
15
16
private double angle;
17
private Point center;
18
private Size size;
19
20
@Override
21
protected void setUp() throws Exception {
22
super.setUp();
23
24
center = new Point(matSize / 2, matSize / 2);
25
size = new Size(matSize / 4, matSize / 2);
26
angle = 40;
27
}
28
29
public void testBoundingRect() {
30
size = new Size(matSize / 2, matSize / 2);
31
assertEquals(size.height, size.width);
32
double length = size.height;
33
34
angle = 45;
35
RotatedRect rr = new RotatedRect(center, size, angle);
36
37
Rect r = rr.boundingRect();
38
double halfDiagonal = length * Math.sqrt(2) / 2;
39
40
assertTrue((r.x == Math.floor(center.x - halfDiagonal)) && (r.y == Math.floor(center.y - halfDiagonal)));
41
42
assertTrue((r.br().x >= Math.ceil(center.x + halfDiagonal)) && (r.br().y >= Math.ceil(center.y + halfDiagonal)));
43
44
assertTrue((r.br().x - Math.ceil(center.x + halfDiagonal)) <= 1 && (r.br().y - Math.ceil(center.y + halfDiagonal)) <= 1);
45
}
46
47
public void testClone() {
48
RotatedRect rrect = new RotatedRect(center, size, angle);
49
RotatedRect clone = rrect.clone();
50
51
assertTrue(clone != null);
52
assertTrue(rrect.center.equals(clone.center));
53
assertTrue(rrect.size.equals(clone.size));
54
assertTrue(rrect.angle == clone.angle);
55
}
56
57
public void testEqualsObject() {
58
Point center2 = new Point(matSize / 3, matSize / 1.5);
59
Size size2 = new Size(matSize / 2, matSize / 4);
60
double angle2 = 0;
61
62
RotatedRect rrect1 = new RotatedRect(center, size, angle);
63
RotatedRect rrect2 = new RotatedRect(center2, size2, angle2);
64
RotatedRect rrect3 = rrect1;
65
RotatedRect clone1 = rrect1.clone();
66
RotatedRect clone2 = rrect2.clone();
67
68
assertTrue(rrect1.equals(rrect3));
69
assertTrue(!rrect1.equals(rrect2));
70
71
assertTrue(rrect2.equals(clone2));
72
clone2.angle = 10;
73
assertTrue(!rrect2.equals(clone2));
74
75
assertTrue(rrect1.equals(clone1));
76
77
clone1.center.x += 1;
78
assertTrue(!rrect1.equals(clone1));
79
80
clone1.center.x -= 1;
81
assertTrue(rrect1.equals(clone1));
82
83
clone1.size.width += 1;
84
assertTrue(!rrect1.equals(clone1));
85
86
assertTrue(!rrect1.equals(size));
87
}
88
89
public void testHashCode() {
90
RotatedRect rr = new RotatedRect(center, size, angle);
91
assertEquals(rr.hashCode(), rr.hashCode());
92
}
93
94
public void testPoints() {
95
RotatedRect rrect = new RotatedRect(center, size, angle);
96
97
Point p[] = new Point[4];
98
rrect.points(p);
99
100
boolean is_p0_irrational = (100 * p[0].x != (int) (100 * p[0].x)) && (100 * p[0].y != (int) (100 * p[0].y));
101
boolean is_p1_irrational = (100 * p[1].x != (int) (100 * p[1].x)) && (100 * p[1].y != (int) (100 * p[1].y));
102
boolean is_p2_irrational = (100 * p[2].x != (int) (100 * p[2].x)) && (100 * p[2].y != (int) (100 * p[2].y));
103
boolean is_p3_irrational = (100 * p[3].x != (int) (100 * p[3].x)) && (100 * p[3].y != (int) (100 * p[3].y));
104
105
assertTrue(is_p0_irrational && is_p1_irrational && is_p2_irrational && is_p3_irrational);
106
107
assertTrue("Symmetric points 0 and 2",
108
Math.abs((p[0].x + p[2].x) / 2 - center.x) + Math.abs((p[0].y + p[2].y) / 2 - center.y) < EPS);
109
110
assertTrue("Symmetric points 1 and 3",
111
Math.abs((p[1].x + p[3].x) / 2 - center.x) + Math.abs((p[1].y + p[3].y) / 2 - center.y) < EPS);
112
113
assertTrue("Orthogonal vectors 01 and 12",
114
Math.abs((p[1].x - p[0].x) * (p[2].x - p[1].x) +
115
(p[1].y - p[0].y) * (p[2].y - p[1].y)) < EPS);
116
117
assertTrue("Orthogonal vectors 12 and 23",
118
Math.abs((p[2].x - p[1].x) * (p[3].x - p[2].x) +
119
(p[2].y - p[1].y) * (p[3].y - p[2].y)) < EPS);
120
121
assertTrue("Orthogonal vectors 23 and 30",
122
Math.abs((p[3].x - p[2].x) * (p[0].x - p[3].x) +
123
(p[3].y - p[2].y) * (p[0].y - p[3].y)) < EPS);
124
125
assertTrue("Orthogonal vectors 30 and 01",
126
Math.abs((p[0].x - p[3].x) * (p[1].x - p[0].x) +
127
(p[0].y - p[3].y) * (p[1].y - p[0].y)) < EPS);
128
129
assertTrue("Length of the vector 01",
130
Math.abs((p[1].x - p[0].x) * (p[1].x - p[0].x) +
131
(p[1].y - p[0].y) * (p[1].y - p[0].y) - size.height * size.height) < EPS);
132
133
assertTrue("Length of the vector 21",
134
Math.abs((p[1].x - p[2].x) * (p[1].x - p[2].x) +
135
(p[1].y - p[2].y) * (p[1].y - p[2].y) - size.width * size.width) < EPS);
136
137
assertTrue("Angle of the vector 21 with the axes", Math.abs((p[2].x - p[1].x) / size.width - Math.cos(angle * Math.PI / 180)) < EPS);
138
}
139
140
public void testRotatedRect() {
141
RotatedRect rr = new RotatedRect();
142
143
assertTrue(rr != null);
144
assertTrue(rr.center != null);
145
assertTrue(rr.size != null);
146
assertTrue(rr.angle == 0.0);
147
}
148
149
public void testRotatedRectDoubleArray() {
150
double[] vals = { 1.5, 2.6, 3.7, 4.2, 5.1 };
151
RotatedRect rr = new RotatedRect(vals);
152
153
assertNotNull(rr);
154
assertEquals(1.5, rr.center.x);
155
assertEquals(2.6, rr.center.y);
156
assertEquals(3.7, rr.size.width);
157
assertEquals(4.2, rr.size.height);
158
assertEquals(5.1, rr.angle);
159
}
160
161
public void testRotatedRectPointSizeDouble() {
162
RotatedRect rr = new RotatedRect(center, size, 40);
163
164
assertTrue(rr != null);
165
assertTrue(rr.center != null);
166
assertTrue(rr.size != null);
167
assertTrue(rr.angle == 40.0);
168
}
169
170
public void testSet() {
171
double[] vals1 = {};
172
RotatedRect r1 = new RotatedRect(center, size, 40);
173
174
r1.set(vals1);
175
176
assertEquals(0., r1.angle);
177
assertPointEquals(new Point(0, 0), r1.center, EPS);
178
assertSizeEquals(new Size(0, 0), r1.size, EPS);
179
180
double[] vals2 = { 1, 2, 3, 4, 5 };
181
RotatedRect r2 = new RotatedRect(center, size, 40);
182
183
r2.set(vals2);
184
185
assertEquals(5., r2.angle);
186
assertPointEquals(new Point(1, 2), r2.center, EPS);
187
assertSizeEquals(new Size(3, 4), r2.size, EPS);
188
}
189
190
public void testToString() {
191
String actual = new RotatedRect(new Point(1, 2), new Size(10, 12), 4.5).toString();
192
String expected = "{ {1.0, 2.0} 10x12 * 4.5 }";
193
assertEquals(expected, actual);
194
}
195
196
public void testMatOfRotatedRect() {
197
RotatedRect a = new RotatedRect(new Point(1,2),new Size(3,4),5.678);
198
RotatedRect b = new RotatedRect(new Point(9,8),new Size(7,6),5.432);
199
MatOfRotatedRect m = new MatOfRotatedRect(a,b,a,b,a,b,a,b);
200
assertEquals(m.rows(), 8);
201
assertEquals(m.cols(), 1);
202
assertEquals(m.type(), CvType.CV_32FC(5));
203
RotatedRect[] arr = m.toArray();
204
assertEquals(arr[2].angle, a.angle, EPS);
205
assertEquals(arr[3].center.x, b.center.x);
206
assertEquals(arr[3].size.width, b.size.width);
207
List<RotatedRect> li = m.toList();
208
assertEquals(li.size(), 8);
209
RotatedRect rr = li.get(7);
210
assertEquals(rr.angle, b.angle, EPS);
211
assertEquals(rr.center.y, b.center.y);
212
}
213
}
214
215