moble 设备多指手势识别 (tap , double_tap , pinch)

本文介绍了一个简单的触摸屏手势识别算法,包括单击、双击、拖动和缩放手势的实现。通过监听touchstart、touchend和touchmove事件,算法能够识别并响应不同类型的触摸屏手势,适用于iOS和部分Android设备。
 1 function(){
 2     elem.addEventListener('touchstart', start , false)
 3     elem.addEventListener('touchend', end , false)
 4     elem.addEventListener('touchmove', move , false)
 5     var coefficient = .02
 6     var fingers
 7    
 8     var threshold = {'dbl_tap':400, 'tap':250}
 9     var start = null
10         ,last_tap = null
11     function start(evt){
12         fingers = getFingers(evt)
13         start = new Date
14      
15         }
16 
17     function end(act ,evt){
18         var now =  new Date
19         if (now - start <  threshold.tap){
20             //tap
21             if (last_tap && (now - last_tap) < threshold.dbl_tap) {
22                 #double_tap 事件
23                 last_tap = null  
24             }else{
25                 #tap 事件
26 
27             }
28             last_tap = now
29             }
30         fingers = null
31       
32 
33         }
34 
35     function move(evt){
36         evt.preventDefault()
37         var end_fingers = getFingers(evt)
38         if (2 == fingers.length && 2 == end_fingers.length)
39             return pinch(fingers , end_fingers)
40         else if (1 == fingers.length)
41             return drag(fingers ,end_fingers)
42 
43         }
44     function drag(fg1 , fg2){
45         var d = {x: fg2[0].x - fg1[0].x , y:fg2[0].y - fg1[0].y }
46         #drag 事件
47 
48         }
49     function pinch(fg1 , fg2){
50 
51         var d = []
52             d.push( getDistance(fg1[0] , fg1[1]) )
53             d.push( getDistance(fg2[0] , fg2[1]) )
54         var scale = 1 - (d[0] - d[1])/ d[0] * coefficient
55         #缩放 scale>1 pinchout ;scale<1 pinchin
56 
57         }
58     function getDistance(A ,B){
59         if (!A || !B) return 0
60         return Math.sqrt((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y))
61 
62         }
63     function getFingers(evt){
64      var g = []
65         for (var i = 0; i < event.touches.length; i++) {
66             var t = event.touches[i]
67             g.push({x:t.pageX ,y :t.pageY})
68             }
69         return g
70         }
71 }

ios 上能监听到 gesturechange事件,但 android机不行  ,从QuoJS(http://quojs.tapquo.com/ )里扣出来简单支持缩放手势的部分

转载于:https://www.cnblogs.com/vaal-water/p/3540727.html

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕基于序贯蒙特卡洛模拟法的配电网可靠性评估展开研究,重点介绍了利用Matlab代码实现该方法的技术路径。文中详细阐述了序贯蒙特卡洛模拟的基本原理及其在配电网可靠性分析中的应用,包括系统状态抽样、时序模拟、故障判断与修复过程等核心环节。通过构建典型配电网模型,结合元件故障率、修复时间等参数进行大量仿真,获取系统可靠性指标如停电频率、停电持续时间等,进而评估不同运行条件或规划方案下的配电网可靠性水平。研究还可能涉及对含分布式电源、储能等新型元件的复杂配电网的适应性分析,展示了该方法在现代电力系统评估中的实用性与扩展性。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事电网规划与运行的技术工程师。; 使用场景及目标:①用于教学与科研中理解蒙特卡洛模拟在电力系统可靠性评估中的具体实现;②为实际配电网的可靠性优化设计、设备配置与运维策略制定提供仿真工具支持;③支撑学术论文复现与算法改进研究; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法流程,重点关注状态转移逻辑与时间序列模拟的实现细节,并尝试在IEEE标准测试系统上进行验证与扩展实验,以深化对方法机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值