From b6254f32a6cfbd40bd1919950b344160f38bf1e4 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 12 Aug 2020 19:51:38 -0700 Subject: Factor accel calculations into calculation classes --- grapher/Models/Calculations/AccelCalculator.cs | 91 ++++++++++++++++++++++++++ grapher/Models/Calculations/AccelData.cs | 32 +++++++++ 2 files changed, 123 insertions(+) create mode 100644 grapher/Models/Calculations/AccelCalculator.cs create mode 100644 grapher/Models/Calculations/AccelData.cs (limited to 'grapher/Models/Calculations') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs new file mode 100644 index 0000000..2d8d892 --- /dev/null +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Models.Calculations +{ + public static class AccelCalculator + { + public struct MagnitudeData + { + public double magnitude; + public int x; + public int y; + } + + public static ReadOnlyCollection Magnitudes = GetMagnitudes(); + + public static void Calculate(AccelData data, ManagedAccel accel, double starter) + { + data.Clear(); + + double lastInputMagnitude = 0; + double lastOutputMagnitude = 0; + + foreach (var magnitudeData in Magnitudes) + { + var output = accel.Accelerate(magnitudeData.x, magnitudeData.y, 1); + + var outMagnitude = Magnitude(output.Item1, output.Item2); + var ratio = magnitudeData.magnitude > 0 ? outMagnitude / magnitudeData.magnitude : starter; + + var inDiff = magnitudeData.magnitude - lastInputMagnitude; + var outDiff = outMagnitude - lastOutputMagnitude; + var slope = inDiff > 0 ? outDiff / inDiff : starter; + + if (!data.OrderedAccelPoints.ContainsKey(magnitudeData.magnitude)) + { + data.OrderedAccelPoints.Add(magnitudeData.magnitude, ratio); + } + + if (!data.OrderedVelocityPoints.ContainsKey(magnitudeData.magnitude)) + { + data.OrderedVelocityPoints.Add(magnitudeData.magnitude, outMagnitude); + } + + if (!data.OrderedGainPoints.ContainsKey(magnitudeData.magnitude)) + { + data.OrderedGainPoints.Add(magnitudeData.magnitude, slope); + } + + lastInputMagnitude = magnitudeData.magnitude; + lastOutputMagnitude = outMagnitude; + } + + } + + public static ReadOnlyCollection GetMagnitudes() + { + var magnitudes = new List(); + for (int i = 0; i < 100; i++) + { + for (int j = 0; j <= i; j++) + { + MagnitudeData magnitudeData; + magnitudeData.magnitude = Magnitude(i, j); + magnitudeData.x = i; + magnitudeData.y = j; + magnitudes.Add(magnitudeData); + } + } + + magnitudes.Sort((m1, m2) => m1.magnitude.CompareTo(m2.magnitude)); + + return magnitudes.AsReadOnly(); + } + + public static double Magnitude(int x, int y) + { + return Math.Sqrt(x * x + y * y); + } + + public static double Magnitude(double x, double y) + { + return Math.Sqrt(x * x + y * y); + } + + } +} diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs new file mode 100644 index 0000000..d304660 --- /dev/null +++ b/grapher/Models/Calculations/AccelData.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Models.Calculations +{ + public class AccelData + { + public AccelData() + { + OrderedAccelPoints = new SortedDictionary(); + OrderedVelocityPoints = new SortedDictionary(); + OrderedGainPoints = new SortedDictionary(); + } + + public SortedDictionary OrderedAccelPoints { get; } + + public SortedDictionary OrderedVelocityPoints { get; } + + public SortedDictionary OrderedGainPoints { get; } + + public void Clear() + { + OrderedAccelPoints.Clear(); + OrderedVelocityPoints.Clear(); + OrderedGainPoints.Clear(); + } + + } +} -- cgit v1.2.3 From 30e1391b224ae028f4476e06a07415a0285ac6c9 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 12 Aug 2020 20:39:53 -0700 Subject: Almost working --- grapher/Models/Calculations/AccelCalculator.cs | 71 +++++++++++++++++++++----- grapher/Models/Calculations/AccelChartData.cs | 31 +++++++++++ grapher/Models/Calculations/AccelData.cs | 19 ++++--- 3 files changed, 97 insertions(+), 24 deletions(-) create mode 100644 grapher/Models/Calculations/AccelChartData.cs (limited to 'grapher/Models/Calculations') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 2d8d892..a768ee9 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -9,6 +9,9 @@ namespace grapher.Models.Calculations { public static class AccelCalculator { + public const int MaxCombined = 100; + public const int MaxXY = 150; + public struct MagnitudeData { public double magnitude; @@ -16,51 +19,59 @@ namespace grapher.Models.Calculations public int y; } - public static ReadOnlyCollection Magnitudes = GetMagnitudes(); + public static ReadOnlyCollection MagnitudesCombined = GetMagnitudes(); + public static ReadOnlyCollection MagnitudesX = GetMagnitudesX(); + public static ReadOnlyCollection MagnitudesY = GetMagnitudesY(); public static void Calculate(AccelData data, ManagedAccel accel, double starter) { data.Clear(); + Calculate(data.Combined, accel, starter, MagnitudesCombined); + Calculate(data.X, accel, starter, MagnitudesX); + Calculate(data.Y, accel, starter, MagnitudesY); + } + + public static void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection magnitudeData) + { double lastInputMagnitude = 0; double lastOutputMagnitude = 0; - foreach (var magnitudeData in Magnitudes) + foreach (var magnitudeDatum in MagnitudesCombined) { - var output = accel.Accelerate(magnitudeData.x, magnitudeData.y, 1); + var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, 1); var outMagnitude = Magnitude(output.Item1, output.Item2); - var ratio = magnitudeData.magnitude > 0 ? outMagnitude / magnitudeData.magnitude : starter; + var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; - var inDiff = magnitudeData.magnitude - lastInputMagnitude; + var inDiff = magnitudeDatum.magnitude - lastInputMagnitude; var outDiff = outMagnitude - lastOutputMagnitude; var slope = inDiff > 0 ? outDiff / inDiff : starter; - if (!data.OrderedAccelPoints.ContainsKey(magnitudeData.magnitude)) + if (!data.AccelPoints.ContainsKey(magnitudeDatum.magnitude)) { - data.OrderedAccelPoints.Add(magnitudeData.magnitude, ratio); + data.AccelPoints.Add(magnitudeDatum.magnitude, ratio); } - if (!data.OrderedVelocityPoints.ContainsKey(magnitudeData.magnitude)) + if (!data.VelocityPoints.ContainsKey(magnitudeDatum.magnitude)) { - data.OrderedVelocityPoints.Add(magnitudeData.magnitude, outMagnitude); + data.VelocityPoints.Add(magnitudeDatum.magnitude, outMagnitude); } - if (!data.OrderedGainPoints.ContainsKey(magnitudeData.magnitude)) + if (!data.GainPoints.ContainsKey(magnitudeDatum.magnitude)) { - data.OrderedGainPoints.Add(magnitudeData.magnitude, slope); + data.GainPoints.Add(magnitudeDatum.magnitude, slope); } - lastInputMagnitude = magnitudeData.magnitude; + lastInputMagnitude = magnitudeDatum.magnitude; lastOutputMagnitude = outMagnitude; } - } public static ReadOnlyCollection GetMagnitudes() { var magnitudes = new List(); - for (int i = 0; i < 100; i++) + for (int i = 0; i < MaxCombined; i++) { for (int j = 0; j <= i; j++) { @@ -77,6 +88,38 @@ namespace grapher.Models.Calculations return magnitudes.AsReadOnly(); } + public static ReadOnlyCollection GetMagnitudesX() + { + var magnitudes = new List(); + + for (int i = 0; i < MaxXY; i++) + { + MagnitudeData magnitudeData; + magnitudeData.magnitude = i; + magnitudeData.x = i; + magnitudeData.y = 0; + magnitudes.Add(magnitudeData); + } + + return magnitudes.AsReadOnly(); + } + + public static ReadOnlyCollection GetMagnitudesY() + { + var magnitudes = new List(); + + for (int i = 0; i < MaxXY; i++) + { + MagnitudeData magnitudeData; + magnitudeData.magnitude = i; + magnitudeData.x = 0; + magnitudeData.y = i; + magnitudes.Add(magnitudeData); + } + + return magnitudes.AsReadOnly(); + } + public static double Magnitude(int x, int y) { return Math.Sqrt(x * x + y * y); diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs new file mode 100644 index 0000000..243827a --- /dev/null +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -0,0 +1,31 @@ +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(); + VelocityPoints = new SortedDictionary(); + GainPoints = new SortedDictionary(); + } + + public SortedDictionary AccelPoints { get; } + + public SortedDictionary VelocityPoints { get; } + + public SortedDictionary GainPoints { get; } + + public void Clear() + { + AccelPoints.Clear(); + VelocityPoints.Clear(); + GainPoints.Clear(); + } + } +} diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs index d304660..a2a6a3a 100644 --- a/grapher/Models/Calculations/AccelData.cs +++ b/grapher/Models/Calculations/AccelData.cs @@ -10,23 +10,22 @@ namespace grapher.Models.Calculations { public AccelData() { - OrderedAccelPoints = new SortedDictionary(); - OrderedVelocityPoints = new SortedDictionary(); - OrderedGainPoints = new SortedDictionary(); + Combined = new AccelChartData(); + X = new AccelChartData(); + Y = new AccelChartData(); } - public SortedDictionary OrderedAccelPoints { get; } + public AccelChartData Combined { get; } - public SortedDictionary OrderedVelocityPoints { get; } + public AccelChartData X { get; } - public SortedDictionary OrderedGainPoints { get; } + public AccelChartData Y { get; } public void Clear() { - OrderedAccelPoints.Clear(); - OrderedVelocityPoints.Clear(); - OrderedGainPoints.Clear(); + Combined.Clear(); + X.Clear(); + Y.Clear(); } - } } -- cgit v1.2.3 From 93a22c08b3223b040c3a3644fc3c4ef82fc576f0 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Thu, 13 Aug 2020 01:52:49 -0700 Subject: Dot to show mouse move --- grapher/Models/Calculations/AccelCalculator.cs | 10 ++++---- grapher/Models/Calculations/AccelChartData.cs | 12 ++++++++++ grapher/Models/Calculations/AccelData.cs | 32 ++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) (limited to 'grapher/Models/Calculations') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index a768ee9..d61a59b 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -23,13 +23,13 @@ namespace grapher.Models.Calculations public static ReadOnlyCollection MagnitudesX = GetMagnitudesX(); public static ReadOnlyCollection MagnitudesY = GetMagnitudesY(); - public static void Calculate(AccelData data, ManagedAccel accel, double starter) + public static void Calculate(AccelData data, ManagedAccel accel, double starterX, double starterY) { data.Clear(); - Calculate(data.Combined, accel, starter, MagnitudesCombined); - Calculate(data.X, accel, starter, MagnitudesX); - Calculate(data.Y, accel, starter, MagnitudesY); + Calculate(data.Combined, accel, starterX, MagnitudesCombined); + Calculate(data.X, accel, starterY, MagnitudesX); + Calculate(data.Y, accel, starterY, MagnitudesY); } public static void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection magnitudeData) @@ -37,7 +37,7 @@ namespace grapher.Models.Calculations double lastInputMagnitude = 0; double lastOutputMagnitude = 0; - foreach (var magnitudeDatum in MagnitudesCombined) + foreach (var magnitudeDatum in magnitudeData) { var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, 1); diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index 243827a..a3354aa 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -27,5 +27,17 @@ namespace grapher.Models.Calculations VelocityPoints.Clear(); GainPoints.Clear(); } + + public (double, double, double) FindInValuesFromOut(double outVelocityValue) + { + var velIdx = ~VelocityPoints.Values.ToList().BinarySearch(outVelocityValue); + + if (velIdx < 0) + { + velIdx = ~velIdx; + } + + return (VelocityPoints.ElementAt(velIdx).Key, AccelPoints.ElementAt(velIdx).Value, GainPoints.ElementAt(velIdx).Value); + } } } diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs index a2a6a3a..a8f3307 100644 --- a/grapher/Models/Calculations/AccelData.cs +++ b/grapher/Models/Calculations/AccelData.cs @@ -3,11 +3,13 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static grapher.AccelCharts; namespace grapher.Models.Calculations { public class AccelData { + public AccelData() { Combined = new AccelChartData(); @@ -27,5 +29,35 @@ namespace grapher.Models.Calculations X.Clear(); Y.Clear(); } + + public void CalculateDots(int x, int y, ref EstimatedPoints estimation) + { + var magnitude = AccelCalculator.Magnitude(x, y); + + estimation.CombinedVelocity.Y = magnitude; + estimation.XVelocity.Y = Math.Abs(x); + estimation.YVelocity.Y = Math.Abs(y); + + (var inCombVel, var combSens, var combGain) = Combined.FindInValuesFromOut(magnitude); + estimation.CombinedVelocity.X = inCombVel; + estimation.CombinedSensitivity.X = inCombVel; + estimation.CombinedGain.X = inCombVel; + estimation.CombinedSensitivity.Y = combSens; + estimation.CombinedGain.Y = combGain; + + (var inXVel, var xSens, var xGain) = X.FindInValuesFromOut(estimation.XVelocity.Y); + estimation.XVelocity.X = inXVel; + estimation.XSensitivity.X = inXVel; + estimation.XGain.X = inXVel; + estimation.XSensitivity.Y = xSens; + estimation.XGain.Y = xGain; + + (var inYVel, var ySens, var yGain) = Y.FindInValuesFromOut(estimation.YVelocity.Y); + estimation.YVelocity.X = inYVel; + estimation.YSensitivity.X = inYVel; + estimation.YGain.X = inYVel; + estimation.YSensitivity.Y = ySens; + estimation.YGain.Y = yGain; + } } } -- cgit v1.2.3 From 6602649bd7f9a9849b25fe55a5e5e8a617f40b70 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Thu, 13 Aug 2020 13:39:40 -0700 Subject: All works smoothly --- grapher/Models/Calculations/AccelCalculator.cs | 2 + grapher/Models/Calculations/AccelChartData.cs | 31 +++++++++++-- grapher/Models/Calculations/AccelData.cs | 63 +++++++++++++++----------- 3 files changed, 65 insertions(+), 31 deletions(-) (limited to 'grapher/Models/Calculations') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index d61a59b..e194854 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -66,6 +66,8 @@ namespace grapher.Models.Calculations lastInputMagnitude = magnitudeDatum.magnitude; lastOutputMagnitude = outMagnitude; } + + data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); } public static ReadOnlyCollection GetMagnitudes() diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index a3354aa..fa31f35 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -13,6 +13,8 @@ namespace grapher.Models.Calculations AccelPoints = new SortedDictionary(); VelocityPoints = new SortedDictionary(); GainPoints = new SortedDictionary(); + OrderedVelocityPointsList = new List(); + OutVelocityToPoints = new Dictionary(); } public SortedDictionary AccelPoints { get; } @@ -21,23 +23,42 @@ namespace grapher.Models.Calculations public SortedDictionary GainPoints { get; } + public List OrderedVelocityPointsList { get; } + + public Dictionary OutVelocityToPoints { get; } + public void Clear() { AccelPoints.Clear(); VelocityPoints.Clear(); GainPoints.Clear(); + OrderedVelocityPointsList.Clear(); + OutVelocityToPoints.Clear(); } public (double, double, double) FindInValuesFromOut(double outVelocityValue) { - var velIdx = ~VelocityPoints.Values.ToList().BinarySearch(outVelocityValue); - - if (velIdx < 0) + if (OutVelocityToPoints.TryGetValue(outVelocityValue, out var values)) { - velIdx = ~velIdx; + return values; } + else + { + var velIdx = OrderedVelocityPointsList.BinarySearch(outVelocityValue); + + if (velIdx < 0) + { + velIdx = ~velIdx; + } - return (VelocityPoints.ElementAt(velIdx).Key, AccelPoints.ElementAt(velIdx).Value, GainPoints.ElementAt(velIdx).Value); + 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; + } } } } diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs index a8f3307..6fb4767 100644 --- a/grapher/Models/Calculations/AccelData.cs +++ b/grapher/Models/Calculations/AccelData.cs @@ -1,4 +1,5 @@ -using System; +using grapher.Models.Charts; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -10,11 +11,18 @@ namespace grapher.Models.Calculations public class AccelData { - public AccelData() + public AccelData( + EstimatedPoints combined, + EstimatedPoints x, + EstimatedPoints y) { Combined = new AccelChartData(); X = new AccelChartData(); Y = new AccelChartData(); + + Estimated = combined; + EstimatedX = x; + EstimatedY = y; } public AccelChartData Combined { get; } @@ -23,6 +31,12 @@ namespace grapher.Models.Calculations public AccelChartData Y { get; } + private EstimatedPoints Estimated { get; } + + private EstimatedPoints EstimatedX { get; } + + private EstimatedPoints EstimatedY { get; } + public void Clear() { Combined.Clear(); @@ -30,34 +44,31 @@ namespace grapher.Models.Calculations Y.Clear(); } - public void CalculateDots(int x, int y, ref EstimatedPoints estimation) + public void CalculateDots(int x, int y) { var magnitude = AccelCalculator.Magnitude(x, y); - estimation.CombinedVelocity.Y = magnitude; - estimation.XVelocity.Y = Math.Abs(x); - estimation.YVelocity.Y = Math.Abs(y); - (var inCombVel, var combSens, var combGain) = Combined.FindInValuesFromOut(magnitude); - estimation.CombinedVelocity.X = inCombVel; - estimation.CombinedSensitivity.X = inCombVel; - estimation.CombinedGain.X = inCombVel; - estimation.CombinedSensitivity.Y = combSens; - estimation.CombinedGain.Y = combGain; - - (var inXVel, var xSens, var xGain) = X.FindInValuesFromOut(estimation.XVelocity.Y); - estimation.XVelocity.X = inXVel; - estimation.XSensitivity.X = inXVel; - estimation.XGain.X = inXVel; - estimation.XSensitivity.Y = xSens; - estimation.XGain.Y = xGain; - - (var inYVel, var ySens, var yGain) = Y.FindInValuesFromOut(estimation.YVelocity.Y); - estimation.YVelocity.X = inYVel; - estimation.YSensitivity.X = inYVel; - estimation.YGain.X = inYVel; - estimation.YSensitivity.Y = ySens; - estimation.YGain.Y = yGain; + Estimated.Velocity.Set(inCombVel, magnitude); + Estimated.Sensitivity.Set(inCombVel, combSens); + Estimated.Gain.Set(inCombVel, combGain); } + + public void CalculateDotsXY(int x, int y) + { + var magnitudeX = Math.Abs(x); + var magnitudeY = Math.Abs(y); + + (var inXVel, var xSens, var xGain) = X.FindInValuesFromOut(magnitudeX); + EstimatedX.Velocity.Set(inXVel, magnitudeX); + EstimatedX.Sensitivity.Set(inXVel, xSens); + EstimatedX.Gain.Set(inXVel, xGain); + + (var inYVel, var ySens, var yGain) = Y.FindInValuesFromOut(magnitudeY); + EstimatedY.Velocity.Set(inYVel, magnitudeY); + EstimatedY.Sensitivity.Set(inYVel, ySens); + EstimatedY.Gain.Set(inYVel, yGain); + } + } } -- cgit v1.2.3 From 32323636b4b5390c114fc2a6d845b7621a983cdc Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Thu, 13 Aug 2020 20:56:41 -0700 Subject: Fix initial points, add poll time constant --- grapher/Models/Calculations/AccelCalculator.cs | 17 ++++++++++---- grapher/Models/Calculations/AccelChartData.cs | 5 +--- grapher/Models/Calculations/AccelData.cs | 32 +++++++++++++------------- 3 files changed, 30 insertions(+), 24 deletions(-) (limited to 'grapher/Models/Calculations') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index e194854..bba3c32 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -23,13 +23,13 @@ namespace grapher.Models.Calculations public static ReadOnlyCollection MagnitudesX = GetMagnitudesX(); public static ReadOnlyCollection MagnitudesY = GetMagnitudesY(); - public static void Calculate(AccelData data, ManagedAccel accel, double starterX, double starterY) + public static void Calculate(AccelData data, ManagedAccel accel) { data.Clear(); - Calculate(data.Combined, accel, starterX, MagnitudesCombined); - Calculate(data.X, accel, starterY, MagnitudesX); - Calculate(data.Y, accel, starterY, MagnitudesY); + Calculate(data.Combined, accel, accel.GetSensitivityX(), MagnitudesCombined); + Calculate(data.X, accel, accel.GetSensitivityX(), MagnitudesX); + Calculate(data.Y, accel, accel.GetSensitivityY(), MagnitudesY); } public static void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection magnitudeData) @@ -132,5 +132,14 @@ namespace grapher.Models.Calculations return Math.Sqrt(x * x + y * y); } + public static double Velocity(int x, int y, double time) + { + return Magnitude(x, y) / time; + } + + public static double Velocity(double x, double y, double time) + { + return Magnitude(x, y) / time; + } } } diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index fa31f35..20142a7 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -36,7 +36,7 @@ namespace grapher.Models.Calculations OutVelocityToPoints.Clear(); } - public (double, double, double) FindInValuesFromOut(double outVelocityValue) + public (double, double, double) FindPointValuesFromOut(double outVelocityValue) { if (OutVelocityToPoints.TryGetValue(outVelocityValue, out var values)) { @@ -52,11 +52,8 @@ namespace grapher.Models.Calculations } 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; } } diff --git a/grapher/Models/Calculations/AccelData.cs b/grapher/Models/Calculations/AccelData.cs index 6fb4767..683c67e 100644 --- a/grapher/Models/Calculations/AccelData.cs +++ b/grapher/Models/Calculations/AccelData.cs @@ -44,30 +44,30 @@ namespace grapher.Models.Calculations Y.Clear(); } - public void CalculateDots(int x, int y) + public void CalculateDots(int x, int y, double timeInMs) { - var magnitude = AccelCalculator.Magnitude(x, y); + var magnitude = AccelCalculator.Velocity(x, y, timeInMs); - (var inCombVel, var combSens, var combGain) = Combined.FindInValuesFromOut(magnitude); + (var inCombVel, var combSens, var combGain) = Combined.FindPointValuesFromOut(magnitude); Estimated.Velocity.Set(inCombVel, magnitude); Estimated.Sensitivity.Set(inCombVel, combSens); Estimated.Gain.Set(inCombVel, combGain); } - public void CalculateDotsXY(int x, int y) + public void CalculateDotsXY(int x, int y, double timeInMs) { - var magnitudeX = Math.Abs(x); - var magnitudeY = Math.Abs(y); - - (var inXVel, var xSens, var xGain) = X.FindInValuesFromOut(magnitudeX); - EstimatedX.Velocity.Set(inXVel, magnitudeX); - EstimatedX.Sensitivity.Set(inXVel, xSens); - EstimatedX.Gain.Set(inXVel, xGain); - - (var inYVel, var ySens, var yGain) = Y.FindInValuesFromOut(magnitudeY); - EstimatedY.Velocity.Set(inYVel, magnitudeY); - EstimatedY.Sensitivity.Set(inYVel, ySens); - EstimatedY.Gain.Set(inYVel, yGain); + var outX = Math.Abs(x); + var outY = Math.Abs(y); + + (var inXVelocity, var xSensitivity, var xGain) = X.FindPointValuesFromOut(outX); + EstimatedX.Velocity.Set(inXVelocity, outX); + EstimatedX.Sensitivity.Set(inXVelocity, xSensitivity); + EstimatedX.Gain.Set(inXVelocity, xGain); + + (var inYVelocity, var ySensitivity, var yGain) = Y.FindPointValuesFromOut(outY); + EstimatedY.Velocity.Set(inYVelocity, outY); + EstimatedY.Sensitivity.Set(inYVelocity, ySensitivity); + EstimatedY.Gain.Set(inYVelocity, yGain); } } -- cgit v1.2.3