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

解决方案 »

  1.   

    是一个好的想法
    但是从计算的效率上,未必比直接算距离高
    因为a+b-c,需要3次sqrt的运算,这个代价不小
    直接算距离的方法:
    http://blog.csdn.net/happy__888/archive/2005/11/09/526154.aspx
    只需要一次sqrt,但是有一次除法引入
      

  2.   

    做a+b-c的时候不用sqrt,用距离的平方来判断也是一样的。楼主的思路还是不错的。
      

  3.   

    不过楼主的算法准确地说是在判断点和直线的距离。happy__888的是正解。
      

  4.   

    MSDN中就有很成熟的算法,用的是矢量计算。
      

  5.   

    使用的CAD软件都不是用点判断的,都是用一个小矩形进行先端裁减判断,算法很高效,没有乘除和开方运算
      

  6.   

    最快的方法还是用鼠标矩形和线段直接作交点检测,这也是CAD软件中的常用手段
    不需要计算交点,就是几次乘法和加减计算就可以判断了,要快的多,
    sqrt是非常慢的