【发布时间】:2016-12-25 07:27:38
【问题描述】:
当我使用 C# 记录光标位置时,我将光标移动到显示器中的圆形路径上。这是我用来记录光标和经过时间的代码:
Stopwatch swTime = new Stopwatch();
private StreamWriter swRecorder;
private void start_Click(object sender, EventArgs e)
{
swRecorder = new StreamWriter("cursor.txt");
swTime.Start();
timer1.Enabled = true;
}
private void stop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
swTime.Stop();
swRecorder.Close();
}
private void timer1_Tick(object sender, EventArgs e)
{
string strNewLine = swTime.Elapsed.TotalMilliseconds.ToString();
strNewLine = strNewLine + "," + Cursor.Position.X.ToString();
swRecorder.WriteLine(strNewLine);
}
如果我绘制光标的记录器位置(X 分量)与时间的关系,我将得到以下图:
然后我测量速度 (DeltaX/DeltaT) 并再次绘制它与时间的关系。然后我会得到以下情节:
现在我的问题是:为什么速度是嘈杂的/锯齿状的?
【问题讨论】:
-
因为你没有匀速移动光标?
-
可能是由于计时器本身的刻度长度吗?编辑:请参阅下面的@dlxeon 非常准确的答案。
-
@RyanPeters 这些图是根据录制时间绘制的。所以,刻度长度不是问题!
-
@PaulF 我没有以稳定的速度移动光标,这就是为什么您会看到速度的巨大变化以窦的形式出现。但是,我说的是高频的微小波动,这不可能是因为手部的动作。
-
记住你的高中数学,你正在做微分。每次输入数据中出现凹凸或褶皱时,您都可以期待峰值或谷值。但是最大的错误来源是不可见的,您通过鼠标点绘制平滑曲线来隐藏它。大问题是你只能得到整数值,它实际上不是一条平滑的曲线。你总是有一个 +/- 0.5 的系统错误。并且区分逐步变化会产生无限的速度。只有通过您选择的 dT 才能对其进行检查。您必须做的是首先通过数据插入一个平滑函数。