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(); }
/// <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); }