diff options
| author | Jacob Palecki <[email protected]> | 2021-01-19 00:30:53 -0800 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2021-01-19 00:30:53 -0800 |
| commit | 74de604f28a70b2ab444e6ba53979ea94e3b8d23 (patch) | |
| tree | 843c530f78da4a340ceac43da3fa87a00b429188 | |
| parent | Hide offset for power type (diff) | |
| download | rawaccel-74de604f28a70b2ab444e6ba53979ea94e3b8d23.tar.xz rawaccel-74de604f28a70b2ab444e6ba53979ea94e3b8d23.zip | |
Mostly working
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 78 |
1 files changed, 69 insertions, 9 deletions
diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 260d137..a3b8e07 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -90,6 +90,8 @@ namespace grapher.Models.Calculations { double lastInputMagnitude = 0; double lastOutputMagnitude = 0; + SimulatedMouseInput lastInput; + double lastSlope = 0; double maxRatio = 0.0; double minRatio = Double.MaxValue; @@ -109,6 +111,14 @@ namespace grapher.Models.Calculations var output = accel.Accelerate(simulatedInputDatum.x, simulatedInputDatum.y, simulatedInputDatum.time); var outMagnitude = Velocity(output.Item1, output.Item2, simulatedInputDatum.time); + var inDiff = Math.Round(simulatedInputDatum.velocity - lastInputMagnitude, 5); + var outDiff = Math.Round(outMagnitude - lastOutputMagnitude, 5); + var slope = inDiff > 0 ? outDiff / inDiff : starter; + + if (inDiff <= 0) + { + continue; + } if (!data.VelocityPoints.ContainsKey(simulatedInputDatum.velocity)) { @@ -138,10 +148,6 @@ namespace grapher.Models.Calculations minRatio = ratio; } - var inDiff = simulatedInputDatum.velocity - lastInputMagnitude; - var outDiff = outMagnitude - lastOutputMagnitude; - var slope = inDiff > 0 ? outDiff / inDiff : starter; - if (slope > maxSlope) { maxSlope = slope; @@ -165,6 +171,8 @@ namespace grapher.Models.Calculations lastInputMagnitude = simulatedInputDatum.velocity; lastOutputMagnitude = outMagnitude; index += 1; + lastInput = simulatedInputDatum; + lastSlope = slope; } index--; @@ -292,7 +300,34 @@ namespace grapher.Models.Calculations public ReadOnlyCollection<SimulatedMouseInput> GetSimulatedInput() { var magnitudes = new List<SimulatedMouseInput>(); - for (int i = 0; i < CombinedMaxVelocity; i+=Increment) + + foreach (var slowMoveX in SlowMovements) + { + foreach (var slowMoveY in SlowMovements) + { + if (slowMoveY >= slowMoveX) + { + continue; + } + + var ratio = slowMoveX > 0.0 ? slowMoveY / slowMoveX : 1; + var ceilX = (int)Math.Round(slowMoveX*50); + var ceilY = (int)Math.Round(slowMoveY*50); + var ceilMagnitude = Magnitude(ceilX, ceilY); + var timeFactor = ceilMagnitude / Magnitude(slowMoveX, slowMoveY); + + SimulatedMouseInput mouseInputData; + mouseInputData.x = ceilX; + mouseInputData.y = ceilY; + mouseInputData.time = MeasurementTime*timeFactor; + mouseInputData.velocity = Velocity(ceilX, ceilY, mouseInputData.time); + mouseInputData.angle = Math.Atan2(ceilY, ceilX); + magnitudes.Add(mouseInputData); + + } + } + + for (int i = 5; i < CombinedMaxVelocity; i+=Increment) { for (int j = 0; j <= i; j+=Increment) { @@ -315,7 +350,20 @@ namespace grapher.Models.Calculations { var magnitudes = new List<SimulatedMouseInput>(); - for (int i = 0; i < XYMaxVelocity; i+=Increment) + foreach (var slowMovement in SlowMovements) + { + var ceil = (int)Math.Ceiling(slowMovement); + var timeFactor = ceil / slowMovement; + SimulatedMouseInput mouseInputData; + mouseInputData.x = ceil; + mouseInputData.y = 0; + mouseInputData.time = MeasurementTime*timeFactor; + mouseInputData.velocity = Velocity(ceil, 0, mouseInputData.time); + mouseInputData.angle = 0; + magnitudes.Add(mouseInputData); + } + + for (int i = 5; i < XYMaxVelocity; i+=Increment) { SimulatedMouseInput mouseInputData; mouseInputData.x = i; @@ -333,7 +381,20 @@ namespace grapher.Models.Calculations { var magnitudes = new List<SimulatedMouseInput>(); - for (int i = 0; i < XYMaxVelocity; i+=Increment) + foreach (var slowMovement in SlowMovements) + { + var ceil = (int)Math.Ceiling(slowMovement); + var timeFactor = ceil / slowMovement; + SimulatedMouseInput mouseInputData; + mouseInputData.x = 0; + mouseInputData.y = ceil; + mouseInputData.time = MeasurementTime*timeFactor; + mouseInputData.velocity = Velocity(0, ceil, mouseInputData.time); + mouseInputData.angle = 0; + magnitudes.Add(mouseInputData); + } + + for (int i = 5; i < XYMaxVelocity; i+=Increment) { SimulatedMouseInput mouseInputData; mouseInputData.x = 0; @@ -359,9 +420,8 @@ namespace grapher.Models.Calculations { var slowMoveX = Math.Round(slowMoveMagnitude * Math.Cos(angle), 4); var slowMoveY = Math.Round(slowMoveMagnitude * Math.Sin(angle), 4); - var ratio = slowMoveX > 0.0 ? slowMoveY / slowMoveX : 90; var ceilX = (int)Math.Round(slowMoveX*90); - var ceilY = (int)Math.Round(slowMoveY*ratio); + var ceilY = (int)Math.Round(slowMoveY*90); var ceilMagnitude = Magnitude(ceilX, ceilY); var timeFactor = ceilMagnitude / slowMoveMagnitude; |