public void Test1() { const int numberOfPoints = 5; var a = new double[2 * numberOfPoints] { -567, -912, -651, -882, 365, -157, -149, -573, -634, 611, }; var arr = new IntPoint[numberOfPoints]; for (var i = 0; i < numberOfPoints; ++i) { arr[i] = new IntPoint(a[2 * i], a[2 * i + 1]); } var concaveCalc = new ConcaveHull(arr, 0, 2); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); }
public void Test_FivePoints() { var arr = new IntPoint[5]; arr[0] = new IntPoint(-90, -10); arr[1] = new IntPoint(80, -20); arr[2] = new IntPoint(-100, 0); arr[3] = new IntPoint(100, 0); arr[4] = new IntPoint(0, -10); var concaveCalc = new ConcaveHull(arr, -1, 2); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); }
public void Test_FivePoints2() { var arr = new IntPoint[5]; arr[0] = new IntPoint(-100, -100); arr[1] = new IntPoint(100, -100); arr[2] = new IntPoint(100, 100); arr[3] = new IntPoint(0, 90); arr[4] = new IntPoint(-100, 100); var concaveCalc = new ConcaveHull(arr, Math.Cos(Math.PI / 8), 2); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); Assert.AreEqual(5, concaveCalc.ConcaveHullPoints.Count); }
public void Test_ForbiddenPointOnHull() { var arr = new IntPoint[5]; arr[0] = new IntPoint(-1100, -20); arr[1] = new IntPoint(1100, -20); // lower line somewhat larger in order to be processed first arr[2] = new IntPoint(1000, 0); // 1000, 0, 0,0 and -1000, 0 are colinear arr[3] = new IntPoint(0, 0); // this point must not be catched by the lower horz line! arr[4] = new IntPoint(-1000, 0); var concaveCalc = new ConcaveHull(arr, 0, 2); // convex and concave hull may contain 0,0, but only as part of the upper horizontal line Assert.AreEqual(4, concaveCalc.ConvexHullPoints.Count); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); }
public void Test_ColinearPointsHorizontal() { var arr = new IntPoint[7]; arr[0] = new IntPoint(-1000, -1000); arr[1] = new IntPoint(1000, -1000); arr[2] = new IntPoint(1000, 0); // 1000, 0, 0,0 and -1000, 0 are colinear arr[3] = new IntPoint(500, -10); // a little bit under this colinear line another point arr[4] = new IntPoint(0, 0); arr[5] = new IntPoint(-500, -10); // here another one a little bit under the colinear line arr[6] = new IntPoint(-1000, 0); var concaveCalc = new ConcaveHull(arr, 0, 2); // will the points 500, -10 and -500, -10 be found? Assert.AreEqual(4, concaveCalc.ConvexHullPoints.Count); Assert.AreEqual(7, concaveCalc.ConcaveHullPoints.Count); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); }
public void Test_Includeness() { var hash = new HashSet <(int, int)>(); for (var numberOfTests = 0; numberOfTests < 10; ++numberOfTests) { var numberOfPoints = 20 + numberOfTests * 10; var arr = new IntPoint[numberOfPoints]; var arrxy = new int[numberOfPoints, 2]; hash.Clear(); for (var i = 0; i < numberOfPoints;) { var x = _random.Next(-1000, 1000); var y = _random.Next(-1000, 1000); if (!hash.Contains((x, y))) { hash.Add((x, y)); arr[i] = new IntPoint(x, y); arrxy[i, 0] = x; arrxy[i, 1] = y; ++i; } } for (double concaveness = 1; concaveness >= -1; concaveness -= 1 / 16.0) { var concaveCalc = new ConcaveHull(arr, concaveness, 2); IncludenessTest(concaveCalc.ConvexHullPoints, arr); IncludenessTest(concaveCalc.ConcaveHullPoints, arr); } } }