From 8c55ca08881b59943bc9dda193107cc8a117cf69 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Mon, 18 Jan 2021 17:39:10 -0800 Subject: Refactor for new graph calculation method --- .../Calculations/Data/AccelDataXYDirectional.cs | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 grapher/Models/Calculations/Data/AccelDataXYDirectional.cs (limited to 'grapher/Models/Calculations/Data/AccelDataXYDirectional.cs') diff --git a/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs new file mode 100644 index 0000000..ffa353f --- /dev/null +++ b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs @@ -0,0 +1,77 @@ +using grapher.Models.Charts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Models.Calculations.Data +{ + public class AccelDataXYDirectional : IAccelData + { + public AccelDataXYDirectional( + EstimatedPoints xPoints, + EstimatedPoints yPoints, + AccelCalculator calculator) + { + X = new AccelChartData(); + Y = new AccelChartData(); + XPoints = xPoints; + YPoints = yPoints; + Calculator = calculator; + } + + public AccelChartData X { get; } + + public AccelChartData Y { get; } + + private EstimatedPoints XPoints { get; } + + private EstimatedPoints YPoints { get; } + + private AccelCalculator Calculator { get; } + + public void CalculateDots(double x, double y, double timeInMs) + { + (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)) + { + XPoints.Sensitivity.Set(points.Item1, points.Item2); + XPoints.Velocity.Set(points.Item1, points.Item3); + XPoints.Gain.Set(points.Item1, points.Item4); + YPoints.Sensitivity.Set(points.Item1, points.Item5); + YPoints.Velocity.Set(points.Item1, points.Item6); + YPoints.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); + } + + } + + public void Clear() + { + X.Clear(); + Y.Clear(); + } + + public void CreateGraphData(ManagedAccel accel, DriverSettings settings) + { + Clear(); + } + + } +} -- cgit v1.2.3 From 4faf0007c7c551fae8fd25fc7a98767070cb9244 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Mon, 18 Jan 2021 22:02:29 -0800 Subject: Directional works --- .../Calculations/Data/AccelDataXYDirectional.cs | 73 ++++++++++++---------- 1 file changed, 40 insertions(+), 33 deletions(-) (limited to 'grapher/Models/Calculations/Data/AccelDataXYDirectional.cs') diff --git a/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs index ffa353f..ad54989 100644 --- a/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs +++ b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs @@ -14,16 +14,26 @@ namespace grapher.Models.Calculations.Data EstimatedPoints yPoints, AccelCalculator calculator) { - X = new AccelChartData(); - Y = new AccelChartData(); XPoints = xPoints; YPoints = yPoints; Calculator = calculator; + AngleToData = new AccelChartData[Constants.AngleDivisions]; + FillAngleData(); } - public AccelChartData X { get; } + public AccelChartData X { get => AngleToData[0]; } - public AccelChartData Y { get; } + public AccelChartData Y { get => AngleToData[Constants.AngleDivisions-1]; } + + public double SensitivityMax { get => X.MaxAccel; } + + public double SensitivityMin { get => X.MinAccel; } + + public double GainMax { get => X.MaxGain; } + + public double GainMin { get => X.MinGain; } + + private AccelChartData[] AngleToData { get; } private EstimatedPoints XPoints { get; } @@ -33,45 +43,42 @@ namespace grapher.Models.Calculations.Data public void CalculateDots(double x, double y, double timeInMs) { - (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)) - { - XPoints.Sensitivity.Set(points.Item1, points.Item2); - XPoints.Velocity.Set(points.Item1, points.Item3); - XPoints.Gain.Set(points.Item1, points.Item4); - YPoints.Sensitivity.Set(points.Item1, points.Item5); - YPoints.Velocity.Set(points.Item1, points.Item6); - YPoints.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); - } - + var outVelocity = AccelCalculator.Velocity(x, y, timeInMs); + var outAngle = Math.Atan2(Math.Abs(y),Math.Abs(x)); + var nearestAngleDivision = AccelCalculator.NearestAngleDivision(outAngle); + var data = AngleToData[nearestAngleDivision]; + var index = data.GetVelocityIndex(outVelocity); + var inVelocity = data.VelocityPoints.ElementAt(index).Key; + var xPoints = X.ValuesAtIndex(index); + var yPoints = Y.ValuesAtIndex(index); + XPoints.Sensitivity.Set(inVelocity, xPoints.Item1); + XPoints.Velocity.Set(inVelocity, xPoints.Item2); + XPoints.Gain.Set(inVelocity, xPoints.Item3); + YPoints.Sensitivity.Set(inVelocity, yPoints.Item1); + YPoints.Velocity.Set(inVelocity, yPoints.Item2); + YPoints.Gain.Set(inVelocity, yPoints.Item3); } public void Clear() { - X.Clear(); - Y.Clear(); + foreach (var data in AngleToData) + { + data.Clear(); + } } public void CreateGraphData(ManagedAccel accel, DriverSettings settings) { Clear(); + Calculator.CalculateCombinedDiffSens(AngleToData, accel, settings, Calculator.SimulatedDirectionalInput); } + private void FillAngleData() + { + for(int i=0; i < Constants.AngleDivisions; i++) + { + AngleToData[i] = new AccelChartData(); + } + } } } -- cgit v1.2.3 From 9c2be5743fb44e8a68084ac0bd15c02f6cce637a Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 20 Jan 2021 00:30:50 -0800 Subject: Final graph fidelity tweaks and fixes --- grapher/Models/Calculations/Data/AccelDataXYDirectional.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'grapher/Models/Calculations/Data/AccelDataXYDirectional.cs') diff --git a/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs index ad54989..8bd889d 100644 --- a/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs +++ b/grapher/Models/Calculations/Data/AccelDataXYDirectional.cs @@ -70,7 +70,7 @@ namespace grapher.Models.Calculations.Data public void CreateGraphData(ManagedAccel accel, DriverSettings settings) { Clear(); - Calculator.CalculateCombinedDiffSens(AngleToData, accel, settings, Calculator.SimulatedDirectionalInput); + Calculator.CalculateDirectional(AngleToData, accel, settings, Calculator.SimulatedDirectionalInput); } private void FillAngleData() -- cgit v1.2.3