Esempio n. 1
0
        public override void Compute(MSInput input, out MSOutput output)
        {
            output = new MSOutput();
            var trajectory = input.Trajectory;

            List <TPoint2D> prevApproximation = null;

            for (var level = input.NumLevels; level >= 1; level--)
            {
                var             epsilon = input.GetEpsilon(level);
                List <TPoint2D> approximation;

                if (prevApproximation == null)
                {
                    approximation = Approximator.Approximate(trajectory, epsilon);
                }
                else
                {
                    approximation = new List <TPoint2D>();

                    var prevPoint = trajectory.First();

                    for (var i = 1; i < prevApproximation.Count; i++)
                    {
                        var point = prevApproximation[i];

                        //excludes the end point
                        var subApproximation = Approximator.Approximate(trajectory, prevPoint.Index, point.Index, epsilon);

                        approximation.AddRange(subApproximation);

                        prevPoint = point;
                    }

                    approximation.Add(trajectory.Last());
                }

                var newTrajectory = new Trajectory2D();
                foreach (var point in approximation)
                {
                    newTrajectory.AppendPoint(point.X, point.Y);
                }

                //report shortest path
                //output.LogObject("Level Shortest Path", levelTrajectory);
                output.LogLine("Level " + level + " trajectory found. Length: " + newTrajectory.Count);
                output.SetTrajectoryAtLevel(level, newTrajectory);

                prevApproximation = approximation;
            }
        }
        public override void Compute(MSInput input, out MSOutput output)
        {
            output = new MSOutput();
            var trajectory     = input.Trajectory;
            var prevTrajectory = trajectory;

            for (var level = 1; level <= input.NumLevels; level++)
            {
                var epsilon       = input.GetEpsilon(level);
                var approximation = Approximator.Approximate(prevTrajectory, epsilon);

                var newTrajectory = new Trajectory2D(approximation);

                //report shortest path
                //output.LogObject("Level Shortest Path", levelTrajectory);
                output.LogLine("Level " + level + " trajectory found. Length: " + approximation.Count);
                output.SetTrajectoryAtLevel(level, newTrajectory);

                prevTrajectory = newTrajectory;
            }
        }