summaryrefslogtreecommitdiff
path: root/grapher/Models/Calculations/AccelCalculator.cs
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 /grapher/Models/Calculations/AccelCalculator.cs
parentAdd chart states to grapher (diff)
downloadrawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.tar.xz
rawaccel-5beedd6d1aca73adaae6556ded584d3f454509b0.zip
Much progress
Diffstat (limited to 'grapher/Models/Calculations/AccelCalculator.cs')
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs57
1 files changed, 55 insertions, 2 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;