【发布时间】:2017-05-10 06:44:46
【问题描述】:
从一组点中检测摇晃手势,基本上是在寻找三个方向变化:
示例:(我们只需要查看 x 坐标,因为我们只查看水平抖动,而不是垂直抖动)
1,2,3,4,5,6,7,8,[9],8,7,[6],[7]
在上面的x坐标序列中,我用[]标记了方向的变化。
问题是,在上述情况下,我们甚至会检测到微小的无意抖动 - 例如,如果您要求某人将手指从屏幕底部直线拖动到顶部,他的手可能会移动不经意间左右晃动,我们会认为这是“摇晃”
例子:
1,2,[3],[2],[3]....(无意晃动)
为了避免这种情况,我们需要某种阈值,只有超过这个阈值,我们才会将运动视为震动。例如,方向变化之间的差距应至少为 3 个点,值的差异应至少为 4 个。
所以我们应该有类似的东西:
1,2,3,4,5,6,7,8,[9],8,7,6,[5],6,7,8,[9]..... 检测到抖动
1,2,3,4,5,6,7,8,[9],8,7,6,6,7,8,9..... 忽略抖动
1,2,3,2,1....忽略抖动...
这似乎很难实现,因为可能必须跟踪三个索引。我没有自己实现这个,而是想知道这是否是一个已知的算法以及我可以查找的解决方案?
【问题讨论】:
-
小技巧:求序列的一阶和二阶导数。
-
@HumamHelfawi 我不明白。在这种情况下,y 坐标无关紧要,因为我们只关注 x 的变化。那么在只有 x 坐标的序列中,你如何找到导数?
-
添加为答案