diff options
| author | Jacob Palecki <[email protected]> | 2020-08-12 20:39:53 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-08-12 20:39:53 -0700 |
| commit | 30e1391b224ae028f4476e06a07415a0285ac6c9 (patch) | |
| tree | a70694de4ca5e8e9f947ce6a1355c7a134d491b8 /grapher/Models/Calculations | |
| parent | Factor accel calculations into calculation classes (diff) | |
| download | rawaccel-30e1391b224ae028f4476e06a07415a0285ac6c9.tar.xz rawaccel-30e1391b224ae028f4476e06a07415a0285ac6c9.zip | |
Almost working
Diffstat (limited to 'grapher/Models/Calculations')
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 71 | ||||
| -rw-r--r-- | grapher/Models/Calculations/AccelChartData.cs | 31 | ||||
| -rw-r--r-- | grapher/Models/Calculations/AccelData.cs | 19 |
3 files changed, 97 insertions, 24 deletions
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<MagnitudeData> Magnitudes = GetMagnitudes(); + public static ReadOnlyCollection<MagnitudeData> MagnitudesCombined = GetMagnitudes(); + public static ReadOnlyCollection<MagnitudeData> MagnitudesX = GetMagnitudesX(); + public static ReadOnlyCollection<MagnitudeData> 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> 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<MagnitudeData> GetMagnitudes() { var magnitudes = new List<MagnitudeData>(); - 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<MagnitudeData> GetMagnitudesX() + { + var magnitudes = new List<MagnitudeData>(); + + 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<MagnitudeData> GetMagnitudesY() + { + var magnitudes = new List<MagnitudeData>(); + + 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<double, double>(); + VelocityPoints = new SortedDictionary<double, double>(); + GainPoints = new SortedDictionary<double, double>(); + } + + public SortedDictionary<double, double> AccelPoints { get; } + + public SortedDictionary<double, double> VelocityPoints { get; } + + public SortedDictionary<double, double> 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<double, double>(); - OrderedVelocityPoints = new SortedDictionary<double, double>(); - OrderedGainPoints = new SortedDictionary<double, double>(); + Combined = new AccelChartData(); + X = new AccelChartData(); + Y = new AccelChartData(); } - public SortedDictionary<double, double> OrderedAccelPoints { get; } + public AccelChartData Combined { get; } - public SortedDictionary<double, double> OrderedVelocityPoints { get; } + public AccelChartData X { get; } - public SortedDictionary<double, double> OrderedGainPoints { get; } + public AccelChartData Y { get; } public void Clear() { - OrderedAccelPoints.Clear(); - OrderedVelocityPoints.Clear(); - OrderedGainPoints.Clear(); + Combined.Clear(); + X.Clear(); + Y.Clear(); } - } } |