我正在寻找一种合适的算法,能够可靠地预测由数字手写笔(例如 Surface Pen)给出的输入坐标。在我的应用程序中,输入的坐标为屏幕上的 x 和 y 坐标(连同它们的时间戳)。给定按时间顺序排列的事件列表,我的目标是找到“下一个”事件的坐标。
我想出的简单算法是使用加权平均。这是一些说明它的代码(在实际代码中,我使用的不仅仅是 4 个点):
class Point{
double x;
double y;
double timestamp;
}
// this contains 4 points
// in chronological order
vector<Point> points;
// predict using simple weighted average
// the subtraction operation is simply subtraction on x and y coordinates
Point diff1 = points[1]-points[0];
Point diff2 = points[2]-points[1];
Point diff3 = points[3]-points[2];
// add a weighted difference to the last point we have
Point predictedPoint = points[3] + diff1 * 0.2 + diff2 * 0.3 + diff3 * 0.5;
这并不像我想的那样好用,因为预测的输入经常不是很准确。因此,我想找到更好的方法来根据先前的点估计下一个输入(如果这也考虑了输入的速度,那就太好了)。