diff options
Diffstat (limited to 'grapher/Models/Calculations/AccelChartData.cs')
| -rw-r--r-- | grapher/Models/Calculations/AccelChartData.cs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs new file mode 100644 index 0000000..20142a7 --- /dev/null +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Models.Calculations +{ + public class AccelChartData + { + public AccelChartData() + { + AccelPoints = new SortedDictionary<double, double>(); + VelocityPoints = new SortedDictionary<double, double>(); + GainPoints = new SortedDictionary<double, double>(); + OrderedVelocityPointsList = new List<double>(); + OutVelocityToPoints = new Dictionary<double, (double, double, double)>(); + } + + public SortedDictionary<double, double> AccelPoints { get; } + + public SortedDictionary<double, double> VelocityPoints { get; } + + public SortedDictionary<double, double> GainPoints { get; } + + public List<double> OrderedVelocityPointsList { get; } + + public Dictionary<double, (double, double, double)> OutVelocityToPoints { get; } + + public void Clear() + { + AccelPoints.Clear(); + VelocityPoints.Clear(); + GainPoints.Clear(); + OrderedVelocityPointsList.Clear(); + OutVelocityToPoints.Clear(); + } + + public (double, double, double) FindPointValuesFromOut(double outVelocityValue) + { + if (OutVelocityToPoints.TryGetValue(outVelocityValue, out var values)) + { + return values; + } + else + { + var velIdx = OrderedVelocityPointsList.BinarySearch(outVelocityValue); + + if (velIdx < 0) + { + velIdx = ~velIdx; + } + + velIdx = Math.Min(velIdx, VelocityPoints.Count - 1); + values = (VelocityPoints.ElementAt(velIdx).Key, AccelPoints.ElementAt(velIdx).Value, GainPoints.ElementAt(velIdx).Value); + OutVelocityToPoints.Add(outVelocityValue, values); + return values; + } + } + } +} |