Ejemplo n.º 1
0
        /// <summary>
        /// Start the RRT.
        /// </summary>
        /// <param name="_Start">Start.</param>
        /// <param name="_StartOrientation">Start orientation.</param>
        /// <param name="_End">End.</param>
        /// <param name="_EndOrientation">End orientation.</param>
        public void Start(Point _Start, double _StartOrientation, Point _End, double _EndOrientation)
        {
            this.StartPoint = InternalMap.FromMapCoordinates(_Start);
            if (PointValid(StartPoint))
            {
                throw new Exception("StartPoint in invalid region");
            }
            this.StartOrientation = _StartOrientation;
            this.StartRRTNode     = new RRTNode(StartPoint, StartOrientation, null);
            this.EndPoint         = InternalMap.FromMapCoordinates(_End);
            if (PointValid(EndPoint))
            {
                throw new Exception("EndPoint in invalid region");
            }
            this.EndOrientation = _EndOrientation;
            this.EndRRTNode     = new RRTNode(EndPoint, EndOrientation, null);

            this.AllNodes.Add(StartRRTNode);
            //Do n iterations of the algorithm
            double PreviousProgress = 0;

            GenerateStartLine();
            Console.WriteLine();

            for (UInt32 it = 0; it < Iterations; it++)
            {
                DoStep();
                Progress = (int)(Math.Round(((double)it / (double)Iterations) * 100));
                if (Progress != PreviousProgress)
                {
                    PreviousProgress = Progress;
                    PrintProgress();
                }
            }
            if (Finished != null)
            {
                Finished(this, new EventArgs());
            }
        }