- Home /
Queuing x and y coordinates and averaging
Hello!
I would like to make a queue of my x and y coordinates every 20 frames. I would then like to average over those 20 and get x average and y average and use that to control something. So I think the queue would be a Vector2 with 20 x values and 20 y values, average it, then shift forward one and average the next 20 which will be 19 of the original and 1 new (thats how queues work right??). Any help much appreciated!!
XYqueue = new Queue<Vector2>();
XY = new Vector2(eyex, eyey);
if (count < 20)
{
XYqueue.Enqueue(XY);
count++;
} else if (count == 20)
{
XYqueue.Enqueue(XY);
XYqueue.Dequeue();
}
Answer by pako · Aug 17, 2018 at 02:33 PM
A Queue is not really needed, and it will just add some overhead. We can use the Cumulative moving average formula to do this is, except in this case we can use Vector2 instead of int:
https://en.wikipedia.org/wiki/Moving_average
using UnityEngine;
public class MovingAverageVector2 : MonoBehaviour {
public Vector2 NewValue; //this is an example for the new value to be averaged
public int MovingAverageLength = 20; //made public in case you want to change it in the Inspector, if not, could be declared Constant
private int count;
private Vector2 movingAverage;
// Update is called once per frame
void Update()
{
count++;
//This will calculate the MovingAverage AFTER the very first value of the MovingAverage
if (count > MovingAverageLength)
{
movingAverage = movingAverage + (NewValue - movingAverage) / (MovingAverageLength + 1);
//Debug.Log("Moving Average: " + movingAverage); //for testing purposes
}
else
{
//NOTE: The MovingAverage will not have a value until at least "MovingAverageLength" values are known (20 values per your requirement)
movingAverage += NewValue;
//This will calculate ONLY the very first value of the MovingAverage,
if (count == MovingAverageLength)
{
movingAverage += movingAverage / count;
//Debug.Log("Moving Average: " + movingAverage); //for testing purposes
}
}
}
}
Your answer
Follow this Question
Related Questions
Benchmark FPS Counter 2 Answers
ZWrite On not working ? 2 Answers
Transparent shader in background queue 2 Answers
How to change when a halo is drawn? 0 Answers