如何在Python中计算鼠标光标的速度大小?

2 投票
2 回答
1629 浏览
提问于 2025-04-16 05:39

http://dl.dropbox.com/u/779859/speedCalc_puradata.JPG

我在纯数据中实现了这个功能,看看我想的这个电路图:

  • 从 ctlin 20 和 21 接收 MIDI 控制输入
  • 把接收到的信号通过管道延迟处理
  • 使用毕达哥拉斯定理
  • 这样就能得到输入的速度。单位不重要,只要是绝对值就行。

我在考虑用 Python 做同样的事情,针对鼠标光标。

基本上,当我移动鼠标时,我想知道鼠标移动的速度。输入数据包的频率是固定的,200Hz。

我可能想出了一个方法,虽然还没测试过。可以考虑收集,比如说,51 个值放在一个列表里,保持 [0] 是当前值,[50] 是最旧的值。然后简单地对这两个值进行计算?

2 个回答

0

原来我只需要X的差值,然后把这个差值当作大小来用。

x_list.insert(0, x)
if len(x_list) > 5:
    x_list.pop()
# Get the velocity
velocity = abs(x_list[0]-x_list[-1])

这里的'x'是光标当前的值,它以200赫兹的频率更新。

2

你所描述的内容会给你一个速度的大小,乘以测量时间间隔的长度。实际上,速度是一个向量。你可以通过 (posX - delayed_posX)/t 来得到它的第一个坐标,通过 (posY - delayed_posY)/t 来得到第二个坐标,这里的 t 是测量之间的时间间隔。注意,这个公式满足 Pfinal = Pstart + t V,其中 P 是我们的位置信息向量。每当你想知道如何测量速度的近似值时,这都是你的起点。时间间隔越小,你对速度的理解就会越准确。

关于你提到的 time.sleep,它不会让你其他的代码变慢:它会完全停止代码的运行,除非它在另一个线程中运行。

你到底想要做什么呢?如果我们不知道你需要数据的位置、需要它的时间以及需要多新鲜的信息,很难说有没有更好的方法。

撰写回答