diff options
Diffstat (limited to 'grapher/Models/Calculations/AccelCalculator.cs')
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 62 |
1 files changed, 55 insertions, 7 deletions
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; |