summaryrefslogtreecommitdiff
path: root/grapher/Models
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-08-19 15:26:25 -0700
committerJacob Palecki <[email protected]>2020-08-19 15:26:25 -0700
commit53c9025337166a408febc15078af3e9b136b3bab (patch)
treec124a399bf5ae56abf9405a41c2908fd753acfbe /grapher/Models
parentMerge pull request #15 from JacobPalecki/GUI (diff)
downloadrawaccel-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.cs17
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs64
-rw-r--r--grapher/Models/Options/AccelOptions.cs1
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);