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