From a4fcd872bd694f77897fd6cc91cd9068f11d0acd Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Fri, 25 Sep 2020 13:25:11 -0700 Subject: Use log LUT rather than binary search for last mouse move point --- grapher/Models/Calculations/AccelCalculator.cs | 62 +++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) (limited to 'grapher/Models/Calculations/AccelCalculator.cs') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index f2a6c7c..5d3582c 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -67,6 +67,10 @@ namespace grapher.Models.Calculations double maxSlope = 0.0; double minSlope = Double.MaxValue; + double log = -2; + int index = 0; + int logIndex = 0; + foreach (var magnitudeDatum in magnitudeData) { if (magnitudeDatum.magnitude <=0) @@ -77,6 +81,22 @@ namespace grapher.Models.Calculations var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); var outMagnitude = Magnitude(output.Item1, output.Item2); + if (!data.VelocityPoints.ContainsKey(magnitudeDatum.magnitude)) + { + data.VelocityPoints.Add(magnitudeDatum.magnitude, outMagnitude); + } + else + { + continue; + } + + while (Math.Pow(10,log) < outMagnitude) + { + data.LogToIndex[logIndex] = index; + log += 0.01; + logIndex++; + } + var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; if (ratio > maxRatio) @@ -108,11 +128,6 @@ namespace grapher.Models.Calculations data.AccelPoints.Add(magnitudeDatum.magnitude, ratio); } - if (!data.VelocityPoints.ContainsKey(magnitudeDatum.magnitude)) - { - data.VelocityPoints.Add(magnitudeDatum.magnitude, outMagnitude); - } - if (!data.GainPoints.ContainsKey(magnitudeDatum.magnitude)) { data.GainPoints.Add(magnitudeDatum.magnitude, slope); @@ -120,9 +135,18 @@ namespace grapher.Models.Calculations lastInputMagnitude = magnitudeDatum.magnitude; lastOutputMagnitude = outMagnitude; + index += 1; + } + + index--; + + while (log <= 4.0) + { + data.LogToIndex[logIndex] = index; + log += 0.01; + logIndex++; } - data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); data.MaxAccel = maxRatio; data.MinAccel = minRatio; data.MaxGain = maxSlope; @@ -143,6 +167,10 @@ namespace grapher.Models.Calculations Sensitivity = GetSens(ref settings); + double log = -2; + int index = 0; + int logIndex = 0; + foreach (var magnitudeDatum in magnitudeData) { var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); @@ -155,6 +183,17 @@ namespace grapher.Models.Calculations { data.Combined.VelocityPoints.Add(magnitudeDatum.magnitude, magnitudeWithoutSens); } + else + { + continue; + } + + while (Math.Pow(10,log) < magnitudeWithoutSens) + { + data.Combined.LogToIndex[logIndex] = index; + log += 0.01; + logIndex++; + } var xRatio = settings.sensitivity.x * ratio; var yRatio = settings.sensitivity.y * ratio; @@ -241,9 +280,18 @@ namespace grapher.Models.Calculations lastInputMagnitude = magnitudeDatum.magnitude; lastOutputMagnitudeX = xOut; lastOutputMagnitudeY = yOut; + index += 1; + } + + index--; + + while (log <= 4.0) + { + data.Combined.LogToIndex[logIndex] = index; + log += 0.01; + logIndex++; } - data.Combined.OrderedVelocityPointsList.AddRange(data.Combined.VelocityPoints.Values.ToList()); data.Combined.MaxAccel = maxRatio; data.Combined.MinAccel = minRatio; data.Combined.MaxGain = maxSlope; -- cgit v1.2.3 From aa9dbd9320938ac2541e5055d0041c9fd4fe5697 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Fri, 25 Sep 2020 21:56:29 -0700 Subject: Fix 0 point for separate x y sens --- grapher/Models/Calculations/AccelCalculator.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'grapher/Models/Calculations/AccelCalculator.cs') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 5d3582c..0838154 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -73,7 +73,7 @@ namespace grapher.Models.Calculations foreach (var magnitudeDatum in magnitudeData) { - if (magnitudeDatum.magnitude <=0) + if (magnitudeDatum.magnitude <= 0) { continue; } @@ -97,7 +97,7 @@ namespace grapher.Models.Calculations logIndex++; } - var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; + var ratio = outMagnitude / magnitudeDatum.magnitude; if (ratio > maxRatio) { @@ -173,11 +173,16 @@ namespace grapher.Models.Calculations foreach (var magnitudeDatum in magnitudeData) { + if (magnitudeDatum.magnitude <= 0) + { + continue; + } + var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); var outputWithoutSens = StripThisSens(output.Item1, output.Item2); var magnitudeWithoutSens = Magnitude(outputWithoutSens.Item1, outputWithoutSens.Item2); - var ratio = magnitudeDatum.magnitude > 0 ? magnitudeWithoutSens / magnitudeDatum.magnitude : 1; + var ratio = magnitudeWithoutSens / magnitudeDatum.magnitude; if (!data.Combined.VelocityPoints.ContainsKey(magnitudeDatum.magnitude)) { -- cgit v1.2.3 From 206cdc1712d02d15b85393a57ca744fbc014a55c Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Fri, 25 Sep 2020 23:03:00 -0700 Subject: SetActive changes field default, bugs fixed --- grapher/Models/Calculations/AccelCalculator.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'grapher/Models/Calculations/AccelCalculator.cs') diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 0838154..e2f7bcc 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -90,7 +90,7 @@ namespace grapher.Models.Calculations continue; } - while (Math.Pow(10,log) < outMagnitude) + while (Math.Pow(10,log) < outMagnitude && logIndex < data.LogToIndex.Length) { data.LogToIndex[logIndex] = index; log += 0.01; @@ -140,7 +140,7 @@ namespace grapher.Models.Calculations index--; - while (log <= 4.0) + while (log <= 5.0) { data.LogToIndex[logIndex] = index; log += 0.01; @@ -193,7 +193,7 @@ namespace grapher.Models.Calculations continue; } - while (Math.Pow(10,log) < magnitudeWithoutSens) + while (Math.Pow(10,log) < magnitudeWithoutSens && logIndex < data.Combined.LogToIndex.Length) { data.Combined.LogToIndex[logIndex] = index; log += 0.01; @@ -290,7 +290,7 @@ namespace grapher.Models.Calculations index--; - while (log <= 4.0) + while (log <= 5.0) { data.Combined.LogToIndex[logIndex] = index; log += 0.01; -- cgit v1.2.3