summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-09-17 01:29:18 -0700
committerJacob Palecki <[email protected]>2020-09-17 01:29:18 -0700
commit5beedd6d1aca73adaae6556ded584d3f454509b0 (patch)
treeb0aa89c37dcdae4ad2533ba5b60e75c584b47eb3
parentAdd chart states to grapher (diff)
downloadrawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.tar.xz
rawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.zip
Much progress
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs57
-rw-r--r--grapher/Models/Charts/AccelCharts.cs2
-rw-r--r--grapher/Models/Charts/ChartState/ChartState.cs3
-rw-r--r--grapher/Models/Charts/ChartState/ChartStateManager.cs12
-rw-r--r--grapher/Models/Charts/ChartState/XYOneGraphState.cs18
-rw-r--r--grapher/Models/Charts/ChartState/XYTwoGraphState.cs32
-rw-r--r--grapher/grapher.csproj10
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" />