public void MultiplyTest() { MatrixH matrix = new MatrixH(Matrix.Identity(3)); PointH[] points = new PointH[] { new PointH(1, 2), new PointH(5, 2), new PointH(12, 2), new PointH(1, 2), new PointH(10, 2), }; PointH[] expected = new PointH[] { new PointH(1, 2), new PointH(5, 2), new PointH(12, 2), new PointH(1, 2), new PointH(10, 2), }; PointH[] actual = (PointH[])points.Clone(); matrix.TransformPoints(actual); Assert.AreEqual(expected[0], actual[0]); Assert.AreEqual(expected[1], actual[1]); Assert.AreEqual(expected[2], actual[2]); Assert.AreEqual(expected[3], actual[3]); Assert.AreEqual(expected[4], actual[4]); }
public void ColinearTest1() { bool actual; PointF pt1, pt2, pt3; pt1 = new PointF(0, 0); pt2 = new PointF(1, 1); pt3 = new PointF(2, 2); actual = Tools.Collinear(pt1, pt2, pt3); Assert.AreEqual(true, actual); pt1 = new PointH(0, 1); pt2 = new PointH(1, 1); pt3 = new PointH(2, 2); actual = Tools.Collinear(pt1, pt2, pt3); Assert.AreEqual(false, actual); }
public void NormalizeTest() { PointH[] points = new PointH[] { new PointH(1, 2), new PointH(5, 2), new PointH(12, 2), new PointH(1, 2), new PointH(10, 2), }; MatrixH T; PointH[] actual = Tools.Normalize(points, out T); // Centroids should be at the origin double cx = 0, cy = 0; for (int i = 0; i < actual.Length; i++) { cx += actual[i].X / actual[i].W; cy += actual[i].Y / actual[i].W; } Assert.AreEqual(cx / actual.Length, 0, 0.0000001); Assert.AreEqual(cy / actual.Length, 0, 0.0000001); // Average distance from the origin should be sqrt(2) double d = 0; for (int i = 0; i < actual.Length; i++) { double x = actual[i].X / actual[i].W; double y = actual[i].Y / actual[i].W; d += System.Math.Sqrt(x * x + y * y); } Assert.AreEqual(d / actual.Length, System.Math.Sqrt(2), 0.00001); }
public void ColinearTest() { bool actual; PointH p1 = new PointH(0, 1); PointH p2 = new PointH(0, 2); PointH p3 = new PointH(0, 3); bool expected = true; actual = Tools.Collinear(p1, p2, p3); Assert.AreEqual(expected, actual); p1 = new PointH(0, 1); p2 = new PointH(1, 0); p3 = new PointH(1, 1); expected = false; actual = Tools.Collinear(p1, p2, p3); Assert.AreEqual(expected, actual); }
public void HomographyTest() { PointH[] x1 = { new PointH(0, 0), new PointH(1, 0), new PointH(0, 1), new PointH(1, 1), }; PointH[] x2 = { new PointH(0, 0), new PointH(1, 0), new PointH(0, 1), new PointH(1, 1), }; double[,] expected = Matrix.Identity(3); double[,] actual = (double[, ])Tools.Homography(x1, x2); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { actual[i, j] /= actual[2, 2]; } } Assert.IsTrue(Matrix.IsEqual(expected, actual, 1e-4)); x1 = new PointH[] { new PointH(2, 0), new PointH(1, 0), new PointH(5, 1), new PointH(1, 1), new PointH(7, 1), new PointH(1, 2), new PointH(1, 1), }; x2 = new PointH[] { new PointH(9, 1), new PointH(1, 5), new PointH(9, 1), new PointH(1, 7), new PointH(2, 7), new PointH(6, 5), new PointH(1, 7), }; expected = new double[, ] { { 0.2225, -3.1727, 1.8023 }, { 0.3648, -1.7149, -0.2173 }, { 0.0607, -0.4562, 0.1229 }, }; expected = (double[, ])(new MatrixH(expected)); actual = (double[, ])Tools.Homography(x1, x2); Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.01)); }