- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
从一组点中检测摇晃手势,基本上是在寻找方向的三个变化:
示例:(我们只需要查看 x 坐标,因为我们只查看水平抖动,而不是垂直抖动)
1,2,3,4,5,6,7,8,[9],8,7,[6],[7]
在上面的x坐标序列中,我用[]标记了方向的变化。
问题是,在上述情况下,我们会检测到即使是微小的无意抖动 - 例如,如果你要求一个人将他的手指从屏幕底部直线拖动到顶部,他的手可能会移动不经意间有点左摇右晃,我们会认为这是“抖动”
示例:
1,2,[3],[2],[3].... (unintentional shake)
为了避免这种情况,我们需要某种阈值,只有超过该阈值我们才将运动视为抖动。例如,方向变化之间的差距至少为3分,值(value)的差异至少为4分。
所以我们应该有这样的东西:
1,2,3,4,5,6,7,8,[9],8,7,6,[5],6,7,8,[9]..... detected shake
1,2,3,4,5,6,7,8,[9],8,7,6,6,7,8,9..... ignored shake
1,2,3,2,1.... ignored shake...
这似乎很难实现,因为可能需要跟踪三个索引。我没有自己实现,而是想知道这是否是一个已知的算法以及我可以查找的解决方案?
最佳答案
根据导数描述函数运动变化的事实,你可以使用导数来轻松解决问题。
让我们举第一个例子:
1, 2, 3, 4, 5, 6, 7, 8, [9], 8, 7, [6], [7]
通过找到这个序列的导数:
1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1
+ + + + + + + + - - - +
现在,很容易知道哪里发生了抖动。
另一个例子:
1, 12, 15, 8, 3, 1, 0, 5, 17, 30
一阶导数:
11, 3, -7, -5, -2, -1, 5, 12, 13
+ + - - - - + + +
简单的实现(未经测试,未经优化):
template <typename valueType> // http://stackoverflow.com/a/67020/4523099
bool same_sign(typename valueType x, typename valueType y){
return (x >= 0) ^ (y < 0);
}
template <typename T>
std::vector<T> get_derivative(std::vector<T> vec_x){
for(size_t i=0;i<vec_x.size()-1;++i){
vec_x[i]= vec_x[i+1]-vec_x[i];
}
vec_x.pop_back();
return vec_x;
}
int main(){
std::vector<int> x{1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 7 };
auto first_derivative=get_derivative(x);
std::vector<size_t> indices_of_shakes;
for(size_t i=0;i<first_derivative.size()-1;++i){
if(!same_sign(first_derivative[i],first_derivative[i+1])){
indices_of_shakes.emplace_back(i);
}
}
}
关于c++ - 给定触摸点列表,如何检测摇动手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43885270/
我是gradle工具的新手,并获得了下一个项目。 TestNG测试某些类,并用@Test注释。 buid.gradle,那里有个小脚本。 test { dependsOn cleanRepor
有没有办法让 div 框在页面加载时抖动?比如可能只有一次或两次? 更新:在这个 URL 上我仍然无法加载页面,我做错了什么? http://tinyurl.com/79azbav 我想我卡在了页面加
我正在尝试为我的游戏调整 html 元素。 我在这里找到这段代码: shake = function (sprite, magnitude = 16, angular = false) { //A
我的意图是在用户执行摇动手势时清空 2 个数组内的值 - force[] 和 stiffness[],来自 prepareforsegue 的另一个类。下面是我的代码,然后是我遇到的错误。 sprin
您好,如果用户名/密码输入错误,我想让我的 div 摇动。我尝试过的方法显然行不通...我认为这可能与我使用 javascript 的方式有关。提前致谢。 HTML/PHP/JavaScript:
是否可以在显示主屏幕时摇动 iPhone 并打开我的应用程序? 例如:触发 (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)
我正在尝试在此代码中替换我的核心动画摇动效果 let shake = CAKeyframeAnimation(keyPath: "position.x") shake.values =
有时会出现创建目录mkdir的情况不是正确的工具。可能是git clone或rsync或mount 。所以当我们有这样的规则时: needDir dirs = filterM ((fmap not)
我需要创建一个带有子菜单的非常简单的响应式菜单。我目前遇到的问题是我的子菜单“抖动”,我不明白为什么。 谢谢! 这是我的HTML
我想在 Android 设备上捕捉“TAP”。例如,假设设备在用户的口袋里。然后他从口袋里摸了摸手机两次,并以一种特殊的方式摸了摸。比如说,用两个/三个手指敲打,比如“TAP -- TAP”。我想捕捉
在我的 iOS 应用程序中,我的屏幕上有一堆具有摆动效果的图标。当我按住其中一个时,它们开始摇晃(就像 iPhone 的菜单一样),但如果我按下主页按钮(将我的应用程序发送到后台),iPhone 就会
插入错误后,我想摇动一个文本字段。 为此,我编写了一个静态抖动动画 public static void shake(Node node) { TranslateTransition tt = n
我是一名优秀的程序员,十分优秀!