Path: blob/master/modules/core/misc/java/test/RotatedRectTest.java
16354 views
package org.opencv.test.core;12import org.opencv.core.CvType;3import org.opencv.core.Point;4import org.opencv.core.Rect;5import org.opencv.core.RotatedRect;6import org.opencv.core.MatOfRotatedRect;7import org.opencv.core.Size;8import org.opencv.test.OpenCVTestCase;910import java.util.Arrays;11import java.util.List;1213public class RotatedRectTest extends OpenCVTestCase {1415private double angle;16private Point center;17private Size size;1819@Override20protected void setUp() throws Exception {21super.setUp();2223center = new Point(matSize / 2, matSize / 2);24size = new Size(matSize / 4, matSize / 2);25angle = 40;26}2728public void testBoundingRect() {29size = new Size(matSize / 2, matSize / 2);30assertEquals(size.height, size.width);31double length = size.height;3233angle = 45;34RotatedRect rr = new RotatedRect(center, size, angle);3536Rect r = rr.boundingRect();37double halfDiagonal = length * Math.sqrt(2) / 2;3839assertTrue((r.x == Math.floor(center.x - halfDiagonal)) && (r.y == Math.floor(center.y - halfDiagonal)));4041assertTrue((r.br().x >= Math.ceil(center.x + halfDiagonal)) && (r.br().y >= Math.ceil(center.y + halfDiagonal)));4243assertTrue((r.br().x - Math.ceil(center.x + halfDiagonal)) <= 1 && (r.br().y - Math.ceil(center.y + halfDiagonal)) <= 1);44}4546public void testClone() {47RotatedRect rrect = new RotatedRect(center, size, angle);48RotatedRect clone = rrect.clone();4950assertTrue(clone != null);51assertTrue(rrect.center.equals(clone.center));52assertTrue(rrect.size.equals(clone.size));53assertTrue(rrect.angle == clone.angle);54}5556public void testEqualsObject() {57Point center2 = new Point(matSize / 3, matSize / 1.5);58Size size2 = new Size(matSize / 2, matSize / 4);59double angle2 = 0;6061RotatedRect rrect1 = new RotatedRect(center, size, angle);62RotatedRect rrect2 = new RotatedRect(center2, size2, angle2);63RotatedRect rrect3 = rrect1;64RotatedRect clone1 = rrect1.clone();65RotatedRect clone2 = rrect2.clone();6667assertTrue(rrect1.equals(rrect3));68assertTrue(!rrect1.equals(rrect2));6970assertTrue(rrect2.equals(clone2));71clone2.angle = 10;72assertTrue(!rrect2.equals(clone2));7374assertTrue(rrect1.equals(clone1));7576clone1.center.x += 1;77assertTrue(!rrect1.equals(clone1));7879clone1.center.x -= 1;80assertTrue(rrect1.equals(clone1));8182clone1.size.width += 1;83assertTrue(!rrect1.equals(clone1));8485assertTrue(!rrect1.equals(size));86}8788public void testHashCode() {89RotatedRect rr = new RotatedRect(center, size, angle);90assertEquals(rr.hashCode(), rr.hashCode());91}9293public void testPoints() {94RotatedRect rrect = new RotatedRect(center, size, angle);9596Point p[] = new Point[4];97rrect.points(p);9899boolean is_p0_irrational = (100 * p[0].x != (int) (100 * p[0].x)) && (100 * p[0].y != (int) (100 * p[0].y));100boolean is_p1_irrational = (100 * p[1].x != (int) (100 * p[1].x)) && (100 * p[1].y != (int) (100 * p[1].y));101boolean is_p2_irrational = (100 * p[2].x != (int) (100 * p[2].x)) && (100 * p[2].y != (int) (100 * p[2].y));102boolean is_p3_irrational = (100 * p[3].x != (int) (100 * p[3].x)) && (100 * p[3].y != (int) (100 * p[3].y));103104assertTrue(is_p0_irrational && is_p1_irrational && is_p2_irrational && is_p3_irrational);105106assertTrue("Symmetric points 0 and 2",107Math.abs((p[0].x + p[2].x) / 2 - center.x) + Math.abs((p[0].y + p[2].y) / 2 - center.y) < EPS);108109assertTrue("Symmetric points 1 and 3",110Math.abs((p[1].x + p[3].x) / 2 - center.x) + Math.abs((p[1].y + p[3].y) / 2 - center.y) < EPS);111112assertTrue("Orthogonal vectors 01 and 12",113Math.abs((p[1].x - p[0].x) * (p[2].x - p[1].x) +114(p[1].y - p[0].y) * (p[2].y - p[1].y)) < EPS);115116assertTrue("Orthogonal vectors 12 and 23",117Math.abs((p[2].x - p[1].x) * (p[3].x - p[2].x) +118(p[2].y - p[1].y) * (p[3].y - p[2].y)) < EPS);119120assertTrue("Orthogonal vectors 23 and 30",121Math.abs((p[3].x - p[2].x) * (p[0].x - p[3].x) +122(p[3].y - p[2].y) * (p[0].y - p[3].y)) < EPS);123124assertTrue("Orthogonal vectors 30 and 01",125Math.abs((p[0].x - p[3].x) * (p[1].x - p[0].x) +126(p[0].y - p[3].y) * (p[1].y - p[0].y)) < EPS);127128assertTrue("Length of the vector 01",129Math.abs((p[1].x - p[0].x) * (p[1].x - p[0].x) +130(p[1].y - p[0].y) * (p[1].y - p[0].y) - size.height * size.height) < EPS);131132assertTrue("Length of the vector 21",133Math.abs((p[1].x - p[2].x) * (p[1].x - p[2].x) +134(p[1].y - p[2].y) * (p[1].y - p[2].y) - size.width * size.width) < EPS);135136assertTrue("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);137}138139public void testRotatedRect() {140RotatedRect rr = new RotatedRect();141142assertTrue(rr != null);143assertTrue(rr.center != null);144assertTrue(rr.size != null);145assertTrue(rr.angle == 0.0);146}147148public void testRotatedRectDoubleArray() {149double[] vals = { 1.5, 2.6, 3.7, 4.2, 5.1 };150RotatedRect rr = new RotatedRect(vals);151152assertNotNull(rr);153assertEquals(1.5, rr.center.x);154assertEquals(2.6, rr.center.y);155assertEquals(3.7, rr.size.width);156assertEquals(4.2, rr.size.height);157assertEquals(5.1, rr.angle);158}159160public void testRotatedRectPointSizeDouble() {161RotatedRect rr = new RotatedRect(center, size, 40);162163assertTrue(rr != null);164assertTrue(rr.center != null);165assertTrue(rr.size != null);166assertTrue(rr.angle == 40.0);167}168169public void testSet() {170double[] vals1 = {};171RotatedRect r1 = new RotatedRect(center, size, 40);172173r1.set(vals1);174175assertEquals(0., r1.angle);176assertPointEquals(new Point(0, 0), r1.center, EPS);177assertSizeEquals(new Size(0, 0), r1.size, EPS);178179double[] vals2 = { 1, 2, 3, 4, 5 };180RotatedRect r2 = new RotatedRect(center, size, 40);181182r2.set(vals2);183184assertEquals(5., r2.angle);185assertPointEquals(new Point(1, 2), r2.center, EPS);186assertSizeEquals(new Size(3, 4), r2.size, EPS);187}188189public void testToString() {190String actual = new RotatedRect(new Point(1, 2), new Size(10, 12), 4.5).toString();191String expected = "{ {1.0, 2.0} 10x12 * 4.5 }";192assertEquals(expected, actual);193}194195public void testMatOfRotatedRect() {196RotatedRect a = new RotatedRect(new Point(1,2),new Size(3,4),5.678);197RotatedRect b = new RotatedRect(new Point(9,8),new Size(7,6),5.432);198MatOfRotatedRect m = new MatOfRotatedRect(a,b,a,b,a,b,a,b);199assertEquals(m.rows(), 8);200assertEquals(m.cols(), 1);201assertEquals(m.type(), CvType.CV_32FC(5));202RotatedRect[] arr = m.toArray();203assertEquals(arr[2].angle, a.angle, EPS);204assertEquals(arr[3].center.x, b.center.x);205assertEquals(arr[3].size.width, b.size.width);206List<RotatedRect> li = m.toList();207assertEquals(li.size(), 8);208RotatedRect rr = li.get(7);209assertEquals(rr.angle, b.angle, EPS);210assertEquals(rr.center.y, b.center.y);211}212}213214215