Пример #1
0
        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);
        }
Пример #2
0
        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);
        }