summaryrefslogtreecommitdiff
path: root/grapher/Models/Calculations/AccelData.cs
diff options
context:
space:
mode:
Diffstat (limited to 'grapher/Models/Calculations/AccelData.cs')
-rw-r--r--grapher/Models/Calculations/AccelData.cs48
1 files changed, 43 insertions, 5 deletions
diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs
index eef4d01..67d4f3f 100644
--- a/grapher/Models/Calculations/AccelData.cs
+++ b/grapher/Models/Calculations/AccelData.cs
@@ -1,5 +1,8 @@
using grapher.Models.Charts;
+using grapher.Models.Serialized;
using System;
+using System.Collections.Generic;
+using System.Linq;
namespace grapher.Models.Calculations
{
@@ -19,6 +22,8 @@ namespace grapher.Models.Calculations
Estimated = combined;
EstimatedX = x;
EstimatedY = y;
+
+ OutVelocityToPoints = new Dictionary<double, (double, double, double, double, double, double, double)>();
}
#endregion Constructors
@@ -37,6 +42,8 @@ namespace grapher.Models.Calculations
private EstimatedPoints EstimatedY { get; }
+ private Dictionary<double, (double, double, double, double, double, double, double)> OutVelocityToPoints { get; }
+
#endregion Properties
#region Methods
@@ -46,22 +53,23 @@ namespace grapher.Models.Calculations
Combined.Clear();
X.Clear();
Y.Clear();
+ OutVelocityToPoints.Clear();
}
public void CalculateDots(int x, int y, double timeInMs)
{
- var magnitude = AccelCalculator.Velocity(x, y, timeInMs);
+ var outVelocity = AccelCalculator.Velocity(x, y, timeInMs);
- (var inCombVel, var combSens, var combGain) = Combined.FindPointValuesFromOut(magnitude);
- Estimated.Velocity.Set(inCombVel, magnitude);
+ (var inCombVel, var combSens, var combGain) = Combined.FindPointValuesFromOut(outVelocity);
+ Estimated.Velocity.Set(inCombVel, outVelocity);
Estimated.Sensitivity.Set(inCombVel, combSens);
Estimated.Gain.Set(inCombVel, combGain);
}
public void CalculateDotsXY(int x, int y, double timeInMs)
{
- var outX = Math.Abs(x);
- var outY = Math.Abs(y);
+ var outX = Math.Abs(x) / timeInMs;
+ var outY = Math.Abs(y) / timeInMs;
(var inXVelocity, var xSensitivity, var xGain) = X.FindPointValuesFromOut(outX);
EstimatedX.Velocity.Set(inXVelocity, outX);
@@ -74,6 +82,36 @@ namespace grapher.Models.Calculations
EstimatedY.Gain.Set(inYVelocity, yGain);
}
+ public void CalculateDotsCombinedDiffSens(int x, int y, double timeInMs, DriverSettings settings)
+ {
+ (var xStripped, var yStripped) = AccelCalculator.StripSens(x, y, settings.sensitivity.x, settings.sensitivity.y);
+ var outVelocity = AccelCalculator.Velocity(xStripped, yStripped, timeInMs);
+
+ if (OutVelocityToPoints.TryGetValue(outVelocity, out var points))
+ {
+ EstimatedX.Sensitivity.Set(points.Item1, points.Item2);
+ EstimatedX.Velocity.Set(points.Item1, points.Item3);
+ EstimatedX.Gain.Set(points.Item1, points.Item4);
+ EstimatedY.Sensitivity.Set(points.Item1, points.Item5);
+ EstimatedY.Velocity.Set(points.Item1, points.Item6);
+ EstimatedY.Gain.Set(points.Item1, points.Item7);
+ }
+ else
+ {
+ var index = Combined.GetVelocityIndex(outVelocity);
+ var inVelocity = Combined.VelocityPoints.ElementAt(index).Key;
+ var xPoints = X.ValuesAtIndex(index);
+ var yPoints = Y.ValuesAtIndex(index);
+ OutVelocityToPoints.Add(outVelocity, (inVelocity, xPoints.Item1, xPoints.Item2, xPoints.Item3, yPoints.Item1, yPoints.Item2, yPoints.Item3));
+ EstimatedX.Sensitivity.Set(inVelocity, xPoints.Item1);
+ EstimatedX.Velocity.Set(inVelocity, xPoints.Item2);
+ EstimatedX.Gain.Set(inVelocity, xPoints.Item3);
+ EstimatedY.Sensitivity.Set(inVelocity, yPoints.Item1);
+ EstimatedY.Velocity.Set(inVelocity, yPoints.Item2);
+ EstimatedY.Gain.Set(inVelocity, yPoints.Item3);
+ }
+ }
+
#endregion Methods
}
}