# 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();
}
``````

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:

``````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
}
}

}
}
``````