public IEnumerable <Vector2> GetPath(Vector2 start, Vector2 end) { _excludedContours = new List <int>(); var result = new List <Vector2>(); _currentPoint = start; _goal = end; _tracer = new PathTracer(_contours, _goal, _excludedContours); do { result.Add(_currentPoint); List <IntersectedContour> intersectedContours = Utils.GetIntersectedContours(_currentPoint, _goal, _contours); if (intersectedContours.Count == 0) { break; } intersectedContours.Sort(SortByDistance); var contour = intersectedContours.FirstOrDefault(item => _excludedContours.IndexOf(item.Contour.Id) < 0); if (contour == null) { throw new Exception("Can't find path because all contoures are excluded!"); } _currentPoint = contour.IntersectionPoint; result.Add(_currentPoint); _currentPoint = _tracer.Trace(_currentPoint, result, contour.Contour); } while (true); result.Add(_goal); return(result); }
private void TracePolygons(IPolygon[] polygons) { tracer = new PathTracer(polygons, goal, excludedPolygons); do { var intersection = FindNearestPolygonIntersection(polygons); if (intersection == null) { return; } currentPoint = intersection.Intersection; currentPath.Add(currentPoint); currentPoint = tracer.Trace(currentPoint, currentPath, intersection.Polygon); currentPath.Add(currentPoint); } while (true); }