From c9326567b9f60219e538f2eb5805cb5473565b7e Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 27 Jun 2016 13:52:46 +0200
Subject: [PATCH] extrapolate if lookahead (for acceleration estimation) goes
 beyond cycle

---
 .../Impl/DistanceBasedDrivingCycle.cs         | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs
index 3c4dd4cdbf..0ca0f55654 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs
@@ -401,12 +401,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var myIterator = CycleIntervalIterator.Clone();
 
 			if (absDistance > _data.Entries.Last().Distance) {
-				return InterpolateCycleEntry(absDistance, _data.Entries.Last());
+				return ExtrapolateCycleEntry(absDistance, _data.Entries.Last());
 			}
 			while (myIterator.RightSample.Distance < absDistance) {
 				myIterator.MoveNext();
 			}
-			;
+			
 			return InterpolateCycleEntry(absDistance, myIterator.RightSample);
 		}
 
@@ -425,6 +425,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return retVal;
 		}
 
+		private DrivingCycleData.DrivingCycleEntry ExtrapolateCycleEntry(Meter absDistance,
+			DrivingCycleData.DrivingCycleEntry lookahead)
+		{
+			var retVal = new DrivingCycleData.DrivingCycleEntry(lookahead)
+			{
+				Distance = absDistance,
+				Altitude = lookahead.Altitude + lookahead.RoadGradient * (absDistance - lookahead.Distance),
+				//VectoMath.Interpolate(CurrentState.Distance, lookahead.Distance, CurrentState.Altitude,lookahead.Altitude, absDistance)
+			};
+
+			retVal.RoadGradient =
+				((retVal.Altitude - CurrentState.Altitude) / (absDistance - CurrentState.Distance)).Value().SI<Radian>();
+
+			return retVal;
+		}
+
 		public Meter Altitude
 		{
 			get { return PreviousState.Altitude; }
-- 
GitLab