• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by KateHassan · Aug 17, 2018 at 02:00 PM · queueaverage

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();
     }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

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
             }
         }
 
     }
 }
 
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image KateHassan · Aug 17, 2018 at 03:41 PM 1
Share

thank you this worked great!! :D

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

88 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Average of Normals 1 Answer

Rendering Order 4 Answers

moving an object trough a queue of points 0 Answers

Shader makes object in front disepear 0 Answers

How to get the median value of a set of data? 0 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges