diff options
| author | Jacob Palecki <[email protected]> | 2020-09-25 13:25:11 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-09-25 13:25:11 -0700 |
| commit | a4fcd872bd694f77897fd6cc91cd9068f11d0acd (patch) | |
| tree | a41ab5e7a4d23ba649ca0c590d5b85157d71d57f /grapher/Models/Calculations/AccelChartData.cs | |
| parent | Remove waithandle: (diff) | |
| download | rawaccel-a4fcd872bd694f77897fd6cc91cd9068f11d0acd.tar.xz rawaccel-a4fcd872bd694f77897fd6cc91cd9068f11d0acd.zip | |
Use log LUT rather than binary search for last mouse move point
Diffstat (limited to 'grapher/Models/Calculations/AccelChartData.cs')
| -rw-r--r-- | grapher/Models/Calculations/AccelChartData.cs | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index 54685a2..98d501b 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -13,8 +13,8 @@ namespace grapher.Models.Calculations 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)>(); + LogToIndex = new int[601]; } #endregion Constructors @@ -35,7 +35,7 @@ namespace grapher.Models.Calculations public SortedDictionary<double, double> GainPoints { get; } - public List<double> OrderedVelocityPointsList { get; } + public int[] LogToIndex { get; } public Dictionary<double, (double, double, double)> OutVelocityToPoints { get; } @@ -48,8 +48,8 @@ namespace grapher.Models.Calculations AccelPoints.Clear(); VelocityPoints.Clear(); GainPoints.Clear(); - OrderedVelocityPointsList.Clear(); OutVelocityToPoints.Clear(); + Array.Clear(LogToIndex, 0, LogToIndex.Length); } public (double, double, double) FindPointValuesFromOut(double outVelocityValue) @@ -80,15 +80,21 @@ namespace grapher.Models.Calculations public int GetVelocityIndex(double outVelocityValue) { - var velIdx = OrderedVelocityPointsList.BinarySearch(outVelocityValue); - - if (velIdx < 0) + var log = Math.Log10(outVelocityValue); + if (log < -2) + { + log = -2; + } + else if (log > 4) + { + log = 4; + } + else { - velIdx = ~velIdx; + log = log * 100 + 200; } - velIdx = Math.Min(velIdx, VelocityPoints.Count - 1); - velIdx = Math.Max(velIdx, 0); + var velIdx = LogToIndex[(int)log]; return velIdx; } |