12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // ReSharper disable ParameterHidesMember
- namespace ARLocation.Utils
- {
- public class MovingAveragePosition
- {
- public DVector3 CalculateAveragePosition()
- {
- return mPosition;
- }
- public double aMin = 2.0;
- public double aMax = 10.0;
- public double cutoff = 0.01;
- public double alpha = 0.25;
- private DVector3 mPosition;
- private bool first = true;
- private double Weight(double a, double aMin, double aMax, double cutoff = 0.01)
- {
- if (a <= aMin)
- {
- return 1.0;
- }
- if (a >= aMax)
- {
- return 0.0;
- }
- var lambda = System.Math.Log(1 / cutoff) / (aMax - aMin);
- return System.Math.Exp(-lambda * (a - aMin));
- }
- public void AddEntry(DVector3 position, double accuracy)
- {
- if (first)
- {
- mPosition = position;
- first = false;
- }
- else
- {
- var b = Weight(accuracy, aMin, aMax, cutoff);
- var a = alpha * b;
- mPosition = a * position + (1 - a) * mPosition;
- }
- }
- public void Rest()
- {
- first = true;
- mPosition = new DVector3();
- }
- }
- }
|