鼠标手势(Mouse Gesture)的C#实现源代码

再来一篇实例讲解(PS:该篇实例改编自Flash AS当中的一个鼠标手势库,具体出处我忘记了,这代码写的有点久了,好像2008年左右写的)。

 

鼠标手势是一个种比较好玩的东西,其应用并不算很广泛,但是研究起来相当好玩。在遨游浏览器当中,你可以看到鼠标手势的应用,例如你按住鼠标右键,然后画一个L,可以关闭当前的标签,从右向左画一横,可以后退,FireFox当中也支持鼠标手势。还有一些游戏中也用到了该技术,例如《三位一体》,还有NDS上的《恶魔城》等等。当然,手写输入发也算是一种鼠标手势,不过其实现方式不知道与我下面将的是否相同,这个没有研究过。

 


其实鼠标手势玩的就是算法,建立弧度向量表,根据鼠标轨迹的点计算方向,然后与预定义的鼠标手势进行对比,取出最相似的一组。这几个步骤当中都要用到不同的算法。

 

首先是弧度向量表,以八个方向的向量划分弧度,并按一定的精度建立一个弧度向量表,用0-7表示8个方向,-1表示“.”。如下图所示:

 

 

 

 

此时,我们就可以根据这个方向建立手势数据了,例如:

A可以表示为71

B可以表示为260123401234

I可以表示为2(与1没有区分开,程序带中的代码也是如此,如果需要区分开,可以用6表示1,即从下往上画一竖,不过这样不符合人们的输入习惯了)

看到这里,相信基本原理也大概明白了,就是预先建立手势数据,然后通过捕获鼠标轨迹的点来建立方向数组,然后与手势数据的数组进行对比。

 

 

接下来从流程上开始说(实例当中的流程):

1.捕获鼠标输入,当鼠标左键按下,开始进行鼠标轨迹记录。

2.以一定时间间隔记录鼠标移动过的点,并通过前后两点的向量计算出向量所对应的方向编号,并添加到数组当中。

3.鼠标左键抬起时结束输入捕获(这里就必须是连笔输入,如果你不希望连笔输入,可以在设定一个时间间隔,在这个时间间隔内如果鼠标按下,则继续捕获),开始对输入的手势数据与所有预先建立的手势数据进行对比,这里采用了Levenshtein算法计算数组相似度,这个算法稍微有点复杂,这里就不解释了,有兴趣的可以去这个网站看看。同时,在对比过程当中,对一些容易混淆的手势进行了精度修正(源代码中的MouseGesture的GestureMatchEvent就是对手势进行精度修正)。

4.打印符合条件的字符。

 


源代码可以在这里下载。其中有两个工程,MouseGestureLib是鼠标手势的库,MouseGesture是一个利用该库实现的识别26个字母+0-9个数字的Demo,有使用说明。

 

代码当中可以优化的地方很多,这篇代码是刚学了C#不久后写的,注释不是太全,见谅。(每次回过头去看自己以前写的代码都觉得有点好笑,心想:“嘿,那个时候我怎么会那样想呢,怎么能那样做呢?”,呵呵,相当的搞笑)

转载于:https://www.cnblogs.com/sweetwxh/archive/2011/07/29/2121414.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
名称:MouseGesture鼠标手势) 版本:1.0.0.2 大小:4904K 语言:简体文 授权:免费软件 平台:Win8/Win7/Vista/Win2003/WinXP 简介: MouseGesture是一款Window系统辅助工具,可用于方便、快速、高效的管理所有窗口。您可以简单地通过不同手势实现关闭、最小化、最大化、全部最小化、还原窗口、左移窗口和右移窗口的功能。 ------------------------------------------------------------------------------------------------- Introduction ------------------------------------------------------------------------------------------------- Welcome to the MouseGesture readme file. MouseGesture is a free tool that assist you to operate windows more quickly and effectively.With MouseGesture you can close, minimize, maximize, restore, left-move, right-move and minimize-all the windows just with your mouse moving. ------------------------------------------------------------------------------------------------------ What's new in MouseGesture 1.0.0.2 ? ------------------------------------------------------------------------------------------------------ * Optimized algorithms and operate more quickly * More accurate when judging the window * Add two browsers on which MouseGesture disable itself * Support for Windows 8 ------------------------------------------------------------------------------------------------- Features ------------------------------------------------------------------------------------------------- 1. Seven mouse-gesture actions associated with windows (Moving with RButton down) * Close a window (down-right) * minimize a window (down) * minimize all windows (down-left) * maximize a window (up) * restore a window (left-down) * left-move a window (left) * right-move a window (right) 2. Providing a using guide application for freshers 3. Enable you change the theme color as you like 4. Automatic launched with systems 5. Enable you shutdown MouseGesture temporarily if you need 6. Disable MouseGesture dynamically while you are surfing the Internet on web browser with it's own mousegestures. So far, 6 web browsers are in it. That is, Sougou explorer, QQBrowser, TheWorld, Maxthon and Opera.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值