gpt4 book ai didi

c# - Unity3D - 查找每秒变化的 float 的平均值

转载 作者:行者123 更新时间:2023-11-30 15:21:43 30 4
gpt4 key购买 nike

我正在计算速度,它工作正常。但是我怎样才能找到速度变量的平均值呢?速度值大约每秒变化一次(当 GPS 值更新时)。当他(她)按下“完成”按钮时,我需要显示用户的平均速度

感谢您的帮助

这是我的示例代码:

void Update()
{
timer += Time.deltaTime;

if (lonA != Input.location.lastData.longitude || latA != Input.location.lastData.latitude)
{
CalculateDistances(lonA, latA, Input.location.lastData.longitude, Input.location.lastData.latitude); // last distance and overall distanceS
lonA = Input.location.lastData.longitude;
latA = Input.location.lastData.latitude;

lastTime = timer;
timer = 0;

speed0 = speed;

CalculateSpeed();
}
}

public static float Radians(float x)
{
return x * Mathf.PI / 180;
}

public void CalculateDistances(float firstLon, float firstLat, float secondLon, float secondLat)
{
float dlon = Radians(secondLon - firstLon);
float dlat = Radians(secondLat - firstLat);

float distance = Mathf.Pow(Mathf.Sin(dlat / 2), 2) + Mathf.Cos(Radians(firstLat)) * Mathf.Cos(Radians(secondLat)) * Mathf.Pow(Mathf.Sin(dlon / 2), 2);

float c = 2 * Mathf.Atan2(Mathf.Sqrt(distance), Mathf.Sqrt(1 - distance));

lastDistance = 6371 * c * 1000;
}

void CalculateSpeed()
{
speed = lastDistance / lastTime * 3.6f;

speedText.text = Mathf.RoundToInt(speed).ToString();
}

最佳答案

CyrillFind 的答案很接近,但如果您考虑整个数据集,则会返回不正确的平均值。假设用户仅运行游戏 3 秒并记录三个值 (10, 20 ,30) mph。如果您计算平均值并“随时”添加它,那么平均值将是 22.5。如果考虑全部数据,则平均为 20。

这种情况发生在“as you go”方法中,因为每次你只考虑最后一个平均值和下一个值;因此,您只需除以用于该计算的数据量 (2),这会忘记所有先前的数据。

如果您想要一个完全准确的平均值,那么您应该将每秒收集的速度值存储在 List<> 中。然后通过遍历 list<> 来计算最后的平均值一旦用户按下“完成”。

如何执行此操作的示例:

List<float> speeds = new List<float>()
void CalculateSpeed()
{
speed = lastDistance / lastTime * 3.6f;

speedText.text = Mathf.RoundToInt(speed).ToString();

speeds.Add(speed);
}

void float returnAverage() //call when Finished
{
float averageTotal;
float finalTotal;

for(int i = 0; i < speeds.Count; i++)
{
averageTotal += speeds[i]
}

finalTotal = averageTotal / speeds.Count;
speeds.Clear() // so as the list is free for the next time
return finalTotal;
}

比这更好更简单的是,如果您知道用户在运行时跟踪的距离和时间,那么只需使用公式 speed = distance/time .

关于c# - Unity3D - 查找每秒变化的 float 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36914737/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com