由已知的两点坐标画了一条线段,希望当鼠标点击时能够选中该线段。我是用直线方程来判断鼠标的点击坐标是否在直线上。实际测试中发现一个问题,对于线段斜率为负的,很容易选中。但对于斜率为正的,根本不能选中。
比如,已知两点的坐标为:(x0,y0),(x1,y1),鼠标点击时得到的坐标为(x,y),若
(y0-y1)/(x0-x1)==(y0-y)/(x0-x)
则判定选中了直线。不知大家以前有没有遇到过类似的问题,谢谢指教。

解决方案 »

  1.   

    /**
     * Tests if a point is on a line.
     */
             //已知两点的坐标为:(x1,y1),(x2,y2),鼠标坐标为(px,py)
    boolean lineContainsPoint(int x1, int y1, int x2, int y2,
    int px, int py) { double a, b, x, y;
    a = (double)(y1 - y2) / (double)(x1 - x2);
    b = (double)y1 - a * (double)x1;
    x = (py - b) / a;
    y = a * px + b; return (Math.min(Math.abs(x - px), Math.abs(y - py)) < 5);
    }
      

  2.   

    鼠标点在直线两侧5pixel内,即认为选中了直线。
      

  3.   

    TO:
    autowind(一个人住真痛苦)你的方法解决了问题,但还得判断一下鼠标的点击坐标不能在线段的延长线附近,并且线段要是垂直的话也得处理。
    另外,http://dev.csdn.net/Develop/article/13/13059.shtm
    的坐标系变换也不错。很奇怪我用它的方法选择线段,非常不灵敏。欢迎大家继续讨论。