检测点击一行

时间:2014-11-24 18:37:40

标签: java algorithm math graphics mouseevent

我想找到一种方法来了解我是否点击了一行。我有一个标准的2D平面图,例如方形和两者之间的线。当我点击该线时,我想检测一下。 线可以是水平的,垂直的或有角度的。 我有这些信息:

- 启动坐标(x,y)

- 结束坐标(x,y)

- 鼠标点击位置(x,y)

我或许可以用tan()获得角度。 我找到了这个解决方案,但我无法添加鼠标事件:How to select a line

谢谢你。

2 个答案:

答案 0 :(得分:0)

看看这个答案:

Shortest distance between a point and a line segment

他们计算从一个点到一个段的最短距离。

计算此值后,您可以接受或拒绝鼠标单击事件:

if ( distanceToSegment(...) < threshold && mouseClicked()) {
     // insert code here
}

阈值取决于您希望用户的精确程度。

答案 1 :(得分:0)

SE成为分段端点,并M为鼠标。

M连接到SE上的点的向量由MS+t.SE给出,其中0<t<1

将此向量平方以获得其(平方)长度:d²=SE²t²+2(SE.MS)t+MS²

找到最小值t=-(SE.MS)/SE²

的位置

如果t<=0,最短距离为S,因此为d²=MS²

如果t>=1,最短距离为E,因此为d²=ME²

否则,最短距离是指段上的一个点,d²=MS²-(SE.MS)²/SE²

无需取平方根,因为d<Tolerance相当于d²<Tolerance²