EaBIM

标题: [计算机图形学] 二维交互绘图中的线段拣选算法 [打印本页]

作者: 萧闫子    时间: 2014-1-9 14:50
标题: [计算机图形学] 二维交互绘图中的线段拣选算法

交互式流程图绘制工具时,遇到了屏幕二维线段鼠标拣选(用鼠标激活线段)的问题。
当时要求在鼠标接近线段时,鼠标光标要变成手指形状,而且此时如果用户按下鼠标左键,则可以激活该条线段。
问题的核心是,如何判断鼠标接近了线段。很直接的想法是:鼠标移动过程中,计算鼠标点到线段的垂直距离,如果距离小于设定的临界值,则判断为鼠标接近了线段。但是随后又考虑,平面上,计算一个点到直线的垂直距离,稍微有点复杂,想要采用尽量简便,又不影响操作的算法。最后经过思考,我确定了这样一种算法,实践证明,效果还是非常好的。


首先,我们考察鼠标顶点C,与线段端点AB所构成的三角形:


                               
登录/注册后可看大图
除了C位于AB线段上,或者位于AB延长线上的时候,这三个点都可以构成一个三角形。并且,根据中学的几何知识,三角形边长之间存在一个定律,就是:任何两边的长度之和都大于第三边长度,也就有


AC + BC > AB
也可以表示为
(AC + BC) – AB = e
// e为变量
再有,也是根据中学的几何知识,对于ABACBC长度确定的情况下,上述公式中的e值是确定的,而且C点距离AB越近,e值就有减小的趋势,其极限值为0
我们知道,当e值为定值的时候,C点有一个运动轨迹,这个轨迹就是围绕AB点,以AB点为原点的椭圆,如下图:


                               
登录/注册后可看大图
回到前面鼠标拣选线段的话题,如果在鼠标移动时,计算e值,即可判断鼠标点位于以AB为原点的哪一个椭圆轨迹上。当e值足够小,也就表示椭圆足够“扁”,此时可以认为C点接近了AB线段。
说到这里,有人会问,根据椭圆区域判断鼠标在线段周围的位置,不及矩形区域判断准确,但是,别忘了,我们是考虑e值足够小的情况,如下图:

                               
登录/注册后可看大图
当椭圆非常“扁”的情况下,其覆盖的区域与一个“扁”的矩形是非常接近的,一般在屏幕象素绘图上,可能只在矩形四个顶点处会有几个象素的差别,而这几个象素,我们是完全可以忽略的。在计算复杂度上,这种算法只需要计算三条线段的长度,再进行一次求和,一次求差值的计算,比计算点到线段的垂直距离要简便得多。


作者: 欧宝    时间: 2014-2-27 14:46
路过!!!
不发表意见……
作者: 欧宝    时间: 2014-2-27 14:52
路过!!!
不发表意见……
作者: 妮可    时间: 2014-3-5 16:50
顶起来…………
作者: 木鬼    时间: 2014-3-26 16:10
(*^__^*) 嘻嘻……
作者: 严英华    时间: 2014-3-26 16:12
(*^__^*) 嘻嘻……
作者: ★の风の☆    时间: 2014-3-26 16:14
顶......
楼下跟上.....
作者: 熊猫    时间: 2014-3-26 16:16
顶......
楼下跟上.....
作者: NetBeetle    时间: 2014-4-1 10:44
路过!!!
帮顶……
作者: codywu    时间: 2014-4-1 10:57
顶!!!!!!!!!!
作者: 飞天舞    时间: 2014-4-11 11:27
路过!!!
不发表意见……
作者: 泰安oim    时间: 2014-4-11 11:33
顶!!!!!!!!!!
作者: codywu    时间: 2014-4-11 11:35
顶起来…………
作者: codywu    时间: 2014-4-23 11:26
顶起来…………
作者: 拉登    时间: 2014-5-14 14:27
(*^__^*) 嘻嘻……
作者: 波罗友    时间: 2014-5-14 14:32
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 木鬼    时间: 2014-5-14 14:39
顶......
楼下跟上.....
作者: 莞人莞事    时间: 2014-5-19 14:23
顶起来…………
作者: 黑超BB    时间: 2014-6-12 09:51
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 莞人莞事    时间: 2014-6-12 09:56
顶起来…………
作者: 大洪p1938    时间: 2014-6-12 09:58
顶起来…………
作者: suanbo    时间: 2014-7-17 13:08
看着头晕   飘过
作者: 萧闫子    时间: 2014-7-30 10:45

好好学习天天向上
作者: 萧闫子    时间: 2014-8-10 10:26

谢谢BIM大神…
作者: 悠悠筱荷    时间: 2014-8-11 15:02
赞一个
作者: 萧闫子    时间: 2014-8-26 14:03
感谢分享
作者: 萧闫子    时间: 2014-9-3 14:26
感谢分享
作者: 嫣雨遥    时间: 2014-9-16 14:38
路过!!!
帮顶……
作者: 元劭    时间: 2014-9-16 14:38
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 冰雨    时间: 2014-9-16 14:38
顶!!!!!!!!!!
作者: 静儿    时间: 2014-9-16 14:38
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 看看侃侃    时间: 2014-9-16 14:38
路过!!!
不发表意见……
作者: cocacola    时间: 2014-9-16 14:38
(*^__^*) 嘻嘻……
作者: dgpeihua    时间: 2014-9-16 14:39
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 乖乖仔    时间: 2014-9-16 14:39
路过!!!
帮顶……
作者: 老朽    时间: 2014-9-16 14:39
顶......
楼下跟上.....
作者: 蓝天POLO    时间: 2014-9-16 14:39
路过!!!
帮顶……
作者: 欧宝    时间: 2014-9-16 14:39
路过!!!
帮顶……
作者: 一梦千寻    时间: 2014-9-16 14:39
路过!!!
不发表意见……
作者: 车晶晶    时间: 2014-9-16 14:40
顶......
楼下跟上.....
作者: ben7    时间: 2014-9-16 14:40
顶!!!!!!!!!!
作者: 千里独行    时间: 2014-9-16 14:40
路过!!!
帮顶……
作者: 筱雅    时间: 2014-9-16 14:40
路过!!!
帮顶……
作者: 车晶晶    时间: 2014-9-16 14:40
路过!!!
不发表意见……
作者: 乖乖仔    时间: 2014-9-16 14:41
路过!!!
不发表意见……
作者: dison    时间: 2014-9-16 14:41
(*^__^*) 嘻嘻……
作者: 极HONDA速    时间: 2014-9-16 14:41
(*^__^*) 嘻嘻……
作者: 千里独行    时间: 2014-9-16 14:41
顶起来…………
作者: 元劭    时间: 2014-9-16 14:41
路过!!!
不发表意见……
作者: 茶神idg    时间: 2014-9-16 14:41
顶......
楼下跟上.....
作者: leowave    时间: 2014-9-16 14:42
顶起来…………
作者: 茶神idg    时间: 2014-9-16 14:42
路过!!!
不发表意见……
作者: ★の风の☆    时间: 2014-9-16 14:42
顶!!!!!!!!!!
作者: 严英华    时间: 2014-9-16 14:42
路过!!!
帮顶……
作者: dgpeihua    时间: 2014-9-16 14:43
路过!!!
不发表意见……
作者: 冰山    时间: 2014-9-16 14:43
路过!!!
帮顶……
作者: AK47    时间: 2014-9-16 14:43
顶......
楼下跟上.....
作者: ben7    时间: 2014-9-16 14:43
路过!!!
帮顶……
作者: 飞天舞    时间: 2014-9-16 14:44
路过!!!
不发表意见……
作者: 入樽    时间: 2014-9-16 14:44
顶!!!!!!!!!!
作者: 蓝天POLO    时间: 2014-9-16 14:44
顶......
楼下跟上.....
作者: 车晶晶    时间: 2014-9-16 14:45
顶起来…………
作者: 乖乖仔    时间: 2014-9-16 14:45
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: We晕晕    时间: 2014-9-16 14:45
顶......
楼下跟上.....
作者: dgpeihua    时间: 2014-9-16 14:45
顶......
楼下跟上.....
作者: 鹦鹉仔    时间: 2014-9-16 14:45
路过!!!
不发表意见……
作者: 悠悠筱荷    时间: 2014-9-16 14:46
顶......
楼下跟上.....
作者: 千里独行    时间: 2014-9-16 14:46
顶!!!!!!!!!!
作者: 老鼠仔CH    时间: 2014-9-16 14:46
顶!!!!!!!!!!
作者: 江枫    时间: 2014-9-16 14:46
顶!!!!!!!!!!
作者: 元劭    时间: 2014-9-16 14:46
顶起来…………
作者: 宇航员    时间: 2014-9-16 14:46
顶......
楼下跟上.....
作者: 木鬼    时间: 2014-9-16 14:46
顶起来…………
作者: 木鬼    时间: 2014-9-16 14:47
路过!!!
帮顶……
作者: 老鼠仔CH    时间: 2014-9-16 14:47
路过!!!
不发表意见……
作者: 泰安oim    时间: 2014-9-16 14:47
(*^__^*) 嘻嘻……
作者: JHXT杰西卡    时间: 2014-9-16 14:47
(*^__^*) 嘻嘻……
作者: 车奴    时间: 2014-9-16 14:48
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 孙雅    时间: 2014-9-16 14:48
(*^__^*) 嘻嘻……
作者: 江枫    时间: 2014-9-16 14:48
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 慕容柔晴    时间: 2014-9-16 14:49
(*^__^*) 嘻嘻……
作者: 风吹枫落    时间: 2014-9-16 14:49
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 大奔KY    时间: 2014-9-16 14:49
顶......
楼下跟上.....
作者: leowave    时间: 2014-9-16 14:49
(*^__^*) 嘻嘻……
作者: 雁田佬    时间: 2014-9-16 14:50
顶......
楼下跟上.....
作者: NetBeetle    时间: 2014-9-16 14:50
顶......
楼下跟上.....
作者: 入樽    时间: 2014-9-16 14:50
路过!!!
不发表意见……
作者: zj1345    时间: 2014-9-16 14:50
路过!!!
不发表意见……
作者: cocacola    时间: 2014-9-16 14:51
顶!!!!!!!!!!
作者: 順順    时间: 2014-9-16 14:51
(*^__^*) 嘻嘻……
作者: 鹦鹉仔    时间: 2014-9-16 14:51
顶!!!!!!!!!!
作者: 妮可    时间: 2014-9-16 14:52
(*^__^*) 嘻嘻……
作者: zpklfruV    时间: 2014-9-16 14:52
路过!!!
帮顶……
作者: 毫半字    时间: 2014-9-16 14:52
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 千里独行    时间: 2014-9-16 14:52
路过!!!
帮顶……
作者: ben7    时间: 2014-9-16 14:53
(*^__^*) 嘻嘻……
作者: 冰山    时间: 2014-9-16 14:53
路过!!!
不发表意见……
作者: 一梦千寻    时间: 2014-9-16 14:53
路过!!!
不发表意见……
作者: 月之影    时间: 2014-9-16 14:54
顶!!!!!!!!!!
作者: 江枫    时间: 2014-9-16 14:54
路过!!!
不发表意见……




欢迎光临 EaBIM (https://eabim.net/) Powered by Discuz! X3.2