diff options
| author | Jacob Palecki <[email protected]> | 2020-09-17 01:29:18 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-09-17 01:29:18 -0700 |
| commit | 5beedd6d1aca73adaae6556ded584d3f454509b0 (patch) | |
| tree | b0aa89c37dcdae4ad2533ba5b60e75c584b47eb3 | |
| parent | Add chart states to grapher (diff) | |
| download | rawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.tar.xz rawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.zip | |
Much progress
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 57 | ||||
| -rw-r--r-- | grapher/Models/Charts/AccelCharts.cs | 2 | ||||
| -rw-r--r-- | grapher/Models/Charts/ChartState/ChartState.cs | 3 | ||||
| -rw-r--r-- | grapher/Models/Charts/ChartState/ChartStateManager.cs | 12 | ||||
| -rw-r--r-- | grapher/Models/Charts/ChartState/XYOneGraphState.cs | 18 | ||||
| -rw-r--r-- | grapher/Models/Charts/ChartState/XYTwoGraphState.cs | 32 | ||||
| -rw-r--r-- | grapher/grapher.csproj | 10 |
7 files changed, 122 insertions, 12 deletions
diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 4627732..9bbbd26 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -49,6 +49,10 @@ namespace grapher.Models.Calculations private double MeasurementTime { get; set; } + private (double, double) RotationVector { get; set; } + + private (double, double) Sensitivity { get; set; } + #endregion Fields #region Methods @@ -59,19 +63,44 @@ namespace grapher.Models.Calculations data.Clear(); - Calculate(data.Combined, accel, settings.sensitivity.x, MagnitudesCombined); + Calculate(data.Combined, accel, settings.sensitivity.x, MagnitudesCombined, true, settings); Calculate(data.X, accel, settings.sensitivity.x, MagnitudesX); Calculate(data.Y, accel, settings.sensitivity.y, MagnitudesY); } - public void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<MagnitudeData> magnitudeData) + public void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<MagnitudeData> magnitudeData, bool strip = false, DriverSettings settings = null) { double lastInputMagnitude = 0; double lastOutputMagnitude = 0; + bool stripSens = strip && ShouldStripSens(ref settings); + bool stripRot = strip && ShouldStripRot(ref settings); + + if(stripSens) + { + Sensitivity = GetSens(ref settings); + } + + if (stripRot) + { + RotationVector = GetRotVector(ref settings); + } + foreach (var magnitudeDatum in magnitudeData) { var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); + var outputX = output.Item1; + var outputY = output.Item2; + + if (stripSens) + { + (outputX, outputY) = StripThisSens(outputX, outputY); + } + + if (stripRot) + { + (outputX, outputY) = StripThisRot(outputX, outputY); + } var outMagnitude = Magnitude(output.Item1, output.Item2); var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; @@ -174,6 +203,30 @@ namespace grapher.Models.Calculations return Magnitude(x, y) / time; } + public static bool ShouldStripSens(ref DriverSettings settings) => + settings.sensitivity.x != settings.sensitivity.y; + + public static bool ShouldStripRot(ref DriverSettings settings) => + settings.rotation > 0; + + public static (double, double) GetSens(ref DriverSettings settings) => + (settings.sensitivity.x, settings.sensitivity.y); + + public static (double, double) GetRotVector(ref DriverSettings settings) => + (Math.Cos(settings.rotation), Math.Sin(settings.rotation)); + + public static (double, double) StripSens(double outputX, double outputY, double sensitivityX, double sensitivityY) => + (outputX / sensitivityX, outputY / sensitivityY); + + public (double, double) StripRot(double outputX, double outputY, double rotX, double rotY) => + (outputX * rotX + outputY * rotY, outputX * rotY - outputY * rotX); + + public (double, double) StripThisSens(double outputX, double outputY) => + StripSens(outputX, outputY, Sensitivity.Item1, Sensitivity.Item2); + + public (double, double) StripThisRot(double outputX, double outputY) => + StripRot(outputX, outputY, RotationVector.Item1, RotationVector.Item2); + public void ScaleByMouseSettings() { var dpiPollFactor = DPI.Data / PollRate.Data; diff --git a/grapher/Models/Charts/AccelCharts.cs b/grapher/Models/Charts/AccelCharts.cs index f255d79..844afe1 100644 --- a/grapher/Models/Charts/AccelCharts.cs +++ b/grapher/Models/Charts/AccelCharts.cs @@ -42,9 +42,9 @@ namespace grapher EnableLastValue.CheckedChanged += new System.EventHandler(OnEnableLastMouseMoveCheckStateChange); - HideVelocityAndGain(); ChartState = ChartStateManager.InitialState(); ChartState.Activate(); + HideVelocityAndGain(); } #endregion Constructors diff --git a/grapher/Models/Charts/ChartState/ChartState.cs b/grapher/Models/Charts/ChartState/ChartState.cs index b450357..cc334ac 100644 --- a/grapher/Models/Charts/ChartState/ChartState.cs +++ b/grapher/Models/Charts/ChartState/ChartState.cs @@ -1,4 +1,5 @@ using grapher.Models.Calculations; +using grapher.Models.Serialized; using System; using System.Collections.Generic; using System.Linq; @@ -30,6 +31,8 @@ namespace grapher.Models.Charts.ChartState public AccelData AccelData { get; } + public virtual DriverSettings Settings { get; set; } + public abstract void MakeDots(int x, int y, double timeInMs); public abstract void Bind(); diff --git a/grapher/Models/Charts/ChartState/ChartStateManager.cs b/grapher/Models/Charts/ChartState/ChartStateManager.cs index 27d0836..b64b1a2 100644 --- a/grapher/Models/Charts/ChartState/ChartStateManager.cs +++ b/grapher/Models/Charts/ChartState/ChartStateManager.cs @@ -41,23 +41,29 @@ namespace grapher.Models.Charts.ChartState private XYTwoGraphState XYTwoGraphState { get; } + public ChartState DetermineState(DriverSettings settings) { + ChartState chartState; + if (settings.combineMagnitudes) { if (settings.sensitivity.x != settings.sensitivity.y) { - return XYOneGraphState; + chartState = XYOneGraphState; } else { - return CombinedState; + chartState = CombinedState; } } else { - return XYTwoGraphState; + chartState = XYTwoGraphState; } + + chartState.Settings = settings; + return chartState; } public ChartState InitialState() diff --git a/grapher/Models/Charts/ChartState/XYOneGraphState.cs b/grapher/Models/Charts/ChartState/XYOneGraphState.cs index 58276e4..3ed5c5b 100644 --- a/grapher/Models/Charts/ChartState/XYOneGraphState.cs +++ b/grapher/Models/Charts/ChartState/XYOneGraphState.cs @@ -16,5 +16,23 @@ namespace grapher.Models.Charts.ChartState accelData) { } + public override void Activate() + { + SensitivityChart.SetSeparate(); + VelocityChart.SetSeparate(); + GainChart.SetSeparate(); + } + + public override void MakeDots(int x, int y, double timeInMs) + { + AccelData.CalculateDotsXY(x, y, timeInMs); + } + + public override void Bind() + { + SensitivityChart.BindXY(AccelData.X.AccelPoints, AccelData.Y.AccelPoints); + VelocityChart.BindXY(AccelData.X.VelocityPoints, AccelData.Y.VelocityPoints); + GainChart.BindXY(AccelData.X.GainPoints, AccelData.Y.GainPoints); + } } } diff --git a/grapher/Models/Charts/ChartState/XYTwoGraphState.cs b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs index f37af08..b54832c 100644 --- a/grapher/Models/Charts/ChartState/XYTwoGraphState.cs +++ b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs @@ -1,9 +1,13 @@ using grapher.Models.Calculations; +using grapher.Models.Serialized; +using System; namespace grapher.Models.Charts.ChartState { public class XYTwoGraphState : ChartState { + private DriverSettings _settings; + public XYTwoGraphState( ChartXY sensitivityChart, ChartXY velocityChart, @@ -16,6 +20,24 @@ namespace grapher.Models.Charts.ChartState accelData) { } + public override DriverSettings Settings + { + get { return _settings; } + set + { + _settings = value; + ShouldStripSens = AccelCalculator.ShouldStripSens(ref value); + if (ShouldStripSens) + { + Sensitivity = AccelCalculator.GetSens(ref value); + } + } + } + + private bool ShouldStripSens { get; set; } + + private (double, double) Sensitivity { get; set; } + public override void Activate() { SensitivityChart.SetSeparate(); @@ -25,7 +47,15 @@ namespace grapher.Models.Charts.ChartState public override void MakeDots(int x, int y, double timeInMs) { - AccelData.CalculateDotsXY(x, y, timeInMs); + double xCalc = x; + double yCalc = y; + + if (ShouldStripSens) + { + (xCalc, yCalc) = AccelCalculator.StripSens(xCalc, yCalc, Sensitivity.Item1, Sensitivity.Item2); + } + + AccelData.CalculateDotsXY((int)Math.Round(xCalc), (int)Math.Round(yCalc), timeInMs); } public override void Bind() diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index 77f566f..72522dd 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -63,12 +63,12 @@ <Compile Include="Models\Calculations\AccelData.cs" /> <Compile Include="Models\Charts\AccelCharts.cs" /> <Compile Include="Models\AccelGUI.cs" /> - <Compile Include="Models\Charts\ChartStates\ChartState.cs" /> - <Compile Include="Models\Charts\ChartStates\ChartStateManager.cs" /> - <Compile Include="Models\Charts\ChartStates\CombinedState.cs" /> + <Compile Include="Models\Charts\ChartState\ChartState.cs" /> + <Compile Include="Models\Charts\ChartState\ChartStateManager.cs" /> + <Compile Include="Models\Charts\ChartState\CombinedState.cs" /> <Compile Include="Models\Charts\EstimatedPoints.cs" /> - <Compile Include="Models\Charts\ChartStates\XYOneGraphState.cs" /> - <Compile Include="Models\Charts\ChartStates\XYTwoGraphState.cs" /> + <Compile Include="Models\Charts\ChartState\XYOneGraphState.cs" /> + <Compile Include="Models\Charts\ChartState\XYTwoGraphState.cs" /> <Compile Include="Models\Mouse\MouseWatcher.cs" /> <Compile Include="Models\Mouse\PointData.cs" /> <Compile Include="Models\Options\AccelTypeOptions.cs" /> |