gpt4 book ai didi

c++ - 计算运行点击/秒值的算法(ala 速度计)

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:50 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何生成每秒点击次数的运行计算(例如,我点击了一个带有窗口的应用程序,它为我提供了一个类似于速度计的点击“速度”值,即每次点击次数第二)。出于某种原因,该算法正在躲避我。

如果我每一秒都报告上一秒发生的点击次数,那么很容易判断我是否只想计算每秒的点击次数。但它变得棘手的地方是,如果在第 1 秒有一次点击,然后在第 2-9 秒有 0 个点击,在第 10 秒有 1 个点击。大概那将是每秒 0.2 次点击——尽管实际上只有当它保持和随着时间的推移平均到那个。如果第 10 秒的点击后 40 秒为 0 次点击,那么它应该是 0 次点击/秒,而不是 0.04 次点击/秒。

很明显,我需要某种类型的窗口,我愿意在其中假设点击是某种模式的一部分,或者至少与最后的点击相关联。但这对我来说没有意义。

我正在为此使用 openframeworks,所以有一个 update() 函数被调用超过一次/秒(比如 30 次/秒),并且有一个 mousePressed() 函数允许我增加一个变量来跟踪点击次数。我可以使用 difftime() 和 time() 来跟踪我是否刚刚跨入新的一秒,然后使用 fmod() 来确定我是否刚刚跨过某个更大的间隔。

如有任何建议,我们将不胜感激。

最佳答案

我认为您想计算每秒点击次数的运行平均值。对于 30 秒的窗口,您可以使用长度为 30 的计数器的循环缓冲区。每秒平均点击次数是计数器总和除以 30。一个索引指向当前计数器,该索引每秒以 30 为模递增,新位置的计数器设置为零。

例子:

const unsigned BUFFER_SIZE = 30;
unsigned counters[BUFFER_SIZE];
unsigned current = 0;
time_t last;

void init() {
time(&last);
}

void update() {
time_t now;
time(&now);
while (now - last >= 1) {
++last;
current = (current+1)%BUFFER_SIZE;
counters[current] = 0;
}
}

void mousePressed() {
++counters[current];
}

float average() {
float sum = 0;
for (int i = 0; i < BUFFER_SIZE; ++i) {
sum += counters[i];
}
return sum/BUFFER_SIZE;
}

关于c++ - 计算运行点击/秒值的算法(ala 速度计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156224/

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