summaryrefslogtreecommitdiff
path: root/grapher/Models/Calculations/AccelCalculator.cs
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2021-01-18 17:39:10 -0800
committerJacob Palecki <[email protected]>2021-01-18 17:39:10 -0800
commit8c55ca08881b59943bc9dda193107cc8a117cf69 (patch)
tree8c8ea7956a69c058d1829250a189b250b2659e7b /grapher/Models/Calculations/AccelCalculator.cs
parentFix xy anisotropy combining in gui (diff)
downloadrawaccel-8c55ca08881b59943bc9dda193107cc8a117cf69.tar.xz
rawaccel-8c55ca08881b59943bc9dda193107cc8a117cf69.zip
Refactor for new graph calculation method
Diffstat (limited to 'grapher/Models/Calculations/AccelCalculator.cs')
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs73
1 files changed, 73 insertions, 0 deletions
diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs
index 2c32753..f59a0fa 100644
--- a/grapher/Models/Calculations/AccelCalculator.cs
+++ b/grapher/Models/Calculations/AccelCalculator.cs
@@ -14,12 +14,24 @@ namespace grapher.Models.Calculations
{
public double velocity;
public double time;
+ public double angle;
public int x;
public int y;
}
#endregion Structs
+ #region Static
+
+ public static double[] SlowMovements =
+ {
+ 0,0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.333, 3.666, 4.0, 4.333, 4.666,
+ };
+
+ public IEnumerable<double> Angles = GetAngles();
+
+ #endregion static
+
#region Constructors
public AccelCalculator(Field dpi, Field pollRate)
@@ -58,6 +70,14 @@ namespace grapher.Models.Calculations
#region Methods
+ public static IEnumerable<double> GetAngles()
+ {
+ for(int i=0; i<19; i++)
+ {
+ yield return (i / 18) * (Math.PI / 2);
+ }
+ }
+
public void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<SimulatedMouseInput> simulatedInputData)
{
double lastInputMagnitude = 0;
@@ -316,6 +336,7 @@ namespace grapher.Models.Calculations
mouseInputData.y = j;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(i, j, mouseInputData.time);
+ mouseInputData.angle = Math.Atan2(j,i);
magnitudes.Add(mouseInputData);
}
}
@@ -336,6 +357,7 @@ namespace grapher.Models.Calculations
mouseInputData.y = 0;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(i, 0, mouseInputData.time);
+ mouseInputData.angle = 0;
magnitudes.Add(mouseInputData);
}
@@ -353,12 +375,63 @@ namespace grapher.Models.Calculations
mouseInputData.y = i;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(0, i, mouseInputData.time);
+ mouseInputData.angle = Math.PI / 2;
magnitudes.Add(mouseInputData);
}
return magnitudes.AsReadOnly();
}
+ public ReadOnlyCollection<SimulatedMouseInput> GetSimulatedInputXY()
+ {
+ var magnitudes = new List<SimulatedMouseInput>();
+
+ foreach (var slowMoveMagnitude in SlowMovements)
+ {
+ foreach (var slowAngle in Angles)
+ {
+ var slowMoveX = slowMoveMagnitude * Math.Cos(slowAngle);
+ var slowMoveY = slowMoveMagnitude * Math.Sin(slowAngle);
+ var ceilX = (int)Math.Ceiling(slowMoveX);
+ var ceilY = (int)Math.Ceiling(slowMoveY);
+ var magnitude = Magnitude(slowMoveX, slowMoveY);
+ var ceilMagnitude = Magnitude(ceilX, ceilY);
+ var timeFactor = ceilMagnitude / magnitude;
+
+ SimulatedMouseInput mouseInputData;
+ mouseInputData.x = ceilX;
+ mouseInputData.y = ceilY;
+ mouseInputData.time = timeFactor;
+ mouseInputData.velocity = Velocity(ceilX, ceilY, timeFactor);
+ mouseInputData.angle = slowAngle;
+ magnitudes.Add(mouseInputData);
+ }
+ }
+
+ for (int magnitude = 5; magnitude < XYMaxVelocity; magnitude+=Increment)
+ {
+ foreach (var angle in Angles)
+ {
+ var slowMoveX = magnitude * Math.Cos(angle);
+ var slowMoveY = magnitude * Math.Sin(angle);
+ var ceilX = (int)Math.Ceiling(slowMoveX);
+ var ceilY = (int)Math.Ceiling(slowMoveY);
+ var ceilMagnitude = Magnitude(ceilX, ceilY);
+ var timeFactor = ceilMagnitude / magnitude;
+
+ SimulatedMouseInput mouseInputData;
+ mouseInputData.x =ceilX;
+ mouseInputData.y = ceilY;
+ mouseInputData.time = MeasurementTime;
+ mouseInputData.velocity = Velocity(ceilX, ceilY, mouseInputData.time);
+ mouseInputData.angle = angle;
+ magnitudes.Add(mouseInputData);
+ }
+ }
+
+ return magnitudes.AsReadOnly();
+ }
+
public static double Magnitude(int x, int y)
{
return Math.Sqrt(x * x + y * y);