diff options
| author | Jacob Palecki <[email protected]> | 2020-08-19 15:26:25 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-08-19 15:26:25 -0700 |
| commit | 53c9025337166a408febc15078af3e9b136b3bab (patch) | |
| tree | c124a399bf5ae56abf9405a41c2908fd753acfbe /grapher/Models | |
| parent | Merge pull request #15 from JacobPalecki/GUI (diff) | |
| download | rawaccel-53c9025337166a408febc15078af3e9b136b3bab.tar.xz rawaccel-53c9025337166a408febc15078af3e9b136b3bab.zip | |
Add natural gain accel; add scale by DPI, poll rate in GUI
Diffstat (limited to 'grapher/Models')
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 17 | ||||
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 64 | ||||
| -rw-r--r-- | grapher/Models/Options/AccelOptions.cs | 1 |
3 files changed, 66 insertions, 16 deletions
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index 8eb2226..2c27bf7 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -18,6 +18,7 @@ namespace grapher public AccelGUI( RawAcceleration accelForm, + AccelCalculator accelCalculator, AccelCharts accelCharts, ManagedAccel managedAccel, AccelOptions accelOptions, @@ -30,9 +31,11 @@ namespace grapher Option limtOrExp, Option midpoint, Button writeButton, - Label mouseMoveLabel) + Label mouseMoveLabel, + ToolStripMenuItem scaleMenuItem) { AccelForm = accelForm; + AccelCalculator = accelCalculator; AccelCharts = accelCharts; ManagedAcceleration = managedAccel; AccelerationOptions = accelOptions; @@ -45,11 +48,14 @@ namespace grapher LimitOrExponent = limtOrExp; Midpoint = midpoint; WriteButton = writeButton; + ScaleMenuItem = scaleMenuItem; ManagedAcceleration.ReadFromDriver(); UpdateGraph(); MouseWatcher = new MouseWatcher(AccelForm, mouseMoveLabel, AccelCharts); + + ScaleMenuItem.Click += new System.EventHandler(OnScaleMenuItemClick); } #endregion constructors @@ -58,6 +64,8 @@ namespace grapher public RawAcceleration AccelForm { get; } + public AccelCalculator AccelCalculator { get; } + public AccelCharts AccelCharts { get; } public ManagedAccel ManagedAcceleration { get; } @@ -84,17 +92,22 @@ namespace grapher public MouseWatcher MouseWatcher { get; } + public ToolStripMenuItem ScaleMenuItem { get; } + #endregion properties #region methods - public void UpdateGraph() { AccelCalculator.Calculate(AccelCharts.AccelData, ManagedAcceleration); AccelCharts.Bind(); } + private void OnScaleMenuItemClick(object sender, EventArgs e) + { + UpdateGraph(); + } #endregion methods } diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index bba3c32..0346fb8 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -4,13 +4,17 @@ using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; namespace grapher.Models.Calculations { - public static class AccelCalculator + public class AccelCalculator { - public const int MaxCombined = 100; - public const int MaxXY = 150; + public const int DefaultDPI = 1200; + public const int DefaultPollRate = 1000; + public const int Resolution = 100; + public const double MaxMultiplier = 85; + public const double XYToCombinedRatio = 1.3; public struct MagnitudeData { @@ -19,12 +23,33 @@ namespace grapher.Models.Calculations public int y; } - public static ReadOnlyCollection<MagnitudeData> MagnitudesCombined = GetMagnitudes(); - public static ReadOnlyCollection<MagnitudeData> MagnitudesX = GetMagnitudesX(); - public static ReadOnlyCollection<MagnitudeData> MagnitudesY = GetMagnitudesY(); - public static void Calculate(AccelData data, ManagedAccel accel) + public AccelCalculator(Field dpi, Field pollRate) { + DPI = dpi; + PollRate = pollRate; + } + + public ReadOnlyCollection<MagnitudeData> MagnitudesCombined { get; private set; } + + public ReadOnlyCollection<MagnitudeData> MagnitudesX { get; private set; } + + public ReadOnlyCollection<MagnitudeData> MagnitudesY { get; private set; } + + public Field DPI { get; private set; } + + public Field PollRate { get; private set; } + + private double CombinedMaxVelocity { get; set; } + + private double XYMaxVelocity { get; set; } + + private int Increment { get; set; } + + public void Calculate(AccelData data, ManagedAccel accel) + { + ScaleByMouseSettings(); + data.Clear(); Calculate(data.Combined, accel, accel.GetSensitivityX(), MagnitudesCombined); @@ -70,12 +95,12 @@ namespace grapher.Models.Calculations data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudes() + public ReadOnlyCollection<MagnitudeData> GetMagnitudes() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxCombined; i++) + for (int i = 0; i < CombinedMaxVelocity; i+=Increment) { - for (int j = 0; j <= i; j++) + for (int j = 0; j <= i; j+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = Magnitude(i, j); @@ -90,11 +115,11 @@ namespace grapher.Models.Calculations return magnitudes.AsReadOnly(); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudesX() + public ReadOnlyCollection<MagnitudeData> GetMagnitudesX() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxXY; i++) + for (int i = 0; i < XYMaxVelocity; i+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = i; @@ -106,11 +131,11 @@ namespace grapher.Models.Calculations return magnitudes.AsReadOnly(); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudesY() + public ReadOnlyCollection<MagnitudeData> GetMagnitudesY() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxXY; i++) + for (int i = 0; i < XYMaxVelocity; i+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = i; @@ -141,5 +166,16 @@ namespace grapher.Models.Calculations { return Magnitude(x, y) / time; } + + public void ScaleByMouseSettings() + { + var dpiPollFactor = DPI.Data / PollRate.Data; + CombinedMaxVelocity = dpiPollFactor * MaxMultiplier; + Increment = (int) Math.Floor(CombinedMaxVelocity / Resolution); + XYMaxVelocity = CombinedMaxVelocity * 1.5; + MagnitudesCombined = GetMagnitudes(); + MagnitudesX = GetMagnitudesX(); + MagnitudesY = GetMagnitudesY(); + } } } diff --git a/grapher/Models/Options/AccelOptions.cs b/grapher/Models/Options/AccelOptions.cs index b233552..03d6ff6 100644 --- a/grapher/Models/Options/AccelOptions.cs +++ b/grapher/Models/Options/AccelOptions.cs @@ -22,6 +22,7 @@ namespace grapher new LogLayout(), new SigmoidLayout(), new PowerLayout(), + new NaturalGainLayout(), new OffLayout() }.ToDictionary(k => k.Name); |