如何在Python中计算鼠标光标的速度大小?
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
,它不会让你其他的代码变慢:它会完全停止代码的运行,除非它在另一个线程中运行。
你到底想要做什么呢?如果我们不知道你需要数据的位置、需要它的时间以及需要多新鲜的信息,很难说有没有更好的方法。