我想找到一种方法来了解我是否点击了一行。我有一个标准的2D平面图,例如方形和两者之间的线。当我点击该线时,我想检测一下。 线可以是水平的,垂直的或有角度的。 我有这些信息:
- 启动坐标(x,y)
- 结束坐标(x,y)
- 鼠标点击位置(x,y)
我或许可以用tan()获得角度。 我找到了这个解决方案,但我无法添加鼠标事件:How to select a line
谢谢你。
答案 0 :(得分:0)
看看这个答案:
Shortest distance between a point and a line segment
他们计算从一个点到一个段的最短距离。
计算此值后,您可以接受或拒绝鼠标单击事件:
if ( distanceToSegment(...) < threshold && mouseClicked()) {
// insert code here
}
阈值取决于您希望用户的精确程度。
答案 1 :(得分:0)
让S
和E
成为分段端点,并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²
。