2014-11-24 85 views
0

我想找到一種方法來知道我是否點擊一行。我有一個標準的二維平面圖,例如正方形,兩者之間有一條直線。我想要檢測何時點擊該行。 該線可以是水平的,垂直的或有角度的。 我有上線的那些信息:檢測點擊一行

-Starting座標(X,Y)

-Ending座標(X,Y)

-The鼠標點擊位置(x,y)的

我可能可以用tan()獲得角度。 我找到了這個解決方案,但是我不能添加鼠標事件:How to select a line

謝謝你。

+0

尚未測試,我不知道它是否有幫助。 – ILoveWaffle 2014-11-24 20:46:31

回答

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²

+0

我做了那樣的事情。 讓我們取x,y,x1,y2,x2,y2 - M.X,M.Y,S.X,S.Y.,E.X,E.Y. (x - x1)/(x2 - x1)=(y - y1)/(y2 - y1)告訴我是否點擊該行。我怎麼能容忍這個?這很有趣。 – ILoveWaffle 2014-11-25 01:53:43

+0

比較斜坡有兩個缺點:1.它適用於無限長線條,不適用於線段,2.當您離開P1時,寬度越來越大。 – 2014-11-25 07:38:09

0

看一看這個答案:

Shortest distance between a point and a line segment

他們計算到段從點的最短距離。

已經計算出這個值,你可以接受或拒絕的鼠標點擊事件:

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

閾值將取決於你想要如何精確的用戶可以。

+0

如果我將線和鼠標點的終點與線的角度相同,是否意味着即時點擊該線? – ILoveWaffle 2014-11-24 19:02:00

+0

我認爲區分線條和細分是很重要的。你所說的是對一條線而言是正確的,但對一個線段來說卻是正確的。您可以在細分受衆羣之外點擊。您需要檢查點是否也處於相同的X區間 – purpletentacle 2014-11-24 19:06:22

+1

現在請記住,分辨率可能會非常高,您要爲用戶提供一定的誤差餘量。這就是計算距離可以得心應手並且會產生更可靠的方法的原因。 – purpletentacle 2014-11-24 19:08:16