private void RunCompare(bool useSegInt, bool useSideInt)
        {
            var rectSegIntersector  = new RectangleLineIntersector(_rectEnv);
            var rectSideIntersector = new SimpleRectangleIntersector(_rectEnv);

            for (int i = 0; i < _pts.Length; i++)
            {
                for (int j = 0; j < _pts.Length; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    bool segResult = false;
                    if (useSegInt)
                    {
                        segResult = rectSegIntersector.Intersects(_pts[i], _pts[j]);
                    }
                    bool sideResult = false;
                    if (useSideInt)
                    {
                        sideResult = rectSideIntersector.Intersects(_pts[i], _pts[j]);
                    }

                    if (useSegInt && useSideInt)
                    {
                        if (segResult != sideResult)
                        {
                            _isValid = false;
                        }
                    }
                }
            }
        }
        public void Run(bool useSegInt, bool useSideInt)
        {
            if (useSegInt)
            {
                Console.WriteLine("Using Segment Intersector");
            }
            if (useSideInt)
            {
                Console.WriteLine("Using Side Intersector");
            }

            Console.WriteLine("# pts: " + _pts.Length);

            var rectSegIntersector  = new RectangleLineIntersector(_rectEnv);
            var rectSideIntersector = new SimpleRectangleIntersector(_rectEnv);

            var sw = new Stopwatch();

            sw.Start();

            for (int i = 0; i < _pts.Length; i++)
            {
                for (int j = 0; j < _pts.Length; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    bool segResult = false;
                    if (useSegInt)
                    {
                        segResult = rectSegIntersector.Intersects(_pts[i], _pts[j]);
                    }
                    bool sideResult = false;
                    if (useSideInt)
                    {
                        sideResult = rectSideIntersector.Intersects(_pts[i], _pts[j]);
                    }

                    if (useSegInt && useSideInt)
                    {
                        if (segResult != sideResult)
                        {
                            throw new ApplicationException("Seg and Side values do not match");
                        }
                    }
                }
            }
            sw.Stop();
            Console.WriteLine("Finished in " + sw.Elapsed);
            Console.WriteLine();
        }
Esempio n. 3
0
 /// <summary>
 /// Creates a visitor for checking rectangle intersection with segments
 /// </summary>
 /// <param name="rectangle">the query rectangle </param>
 public RectangleIntersectsSegmentVisitor(IPolygon rectangle)
 {
     _rectEnv         = rectangle.EnvelopeInternal;
     _rectIntersector = new RectangleLineIntersector(_rectEnv);
 }