Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
                }
            }
        }