我想找到一種方法來知道我是否點擊一行。我有一個標準的二維平面圖,例如正方形,兩者之間有一條直線。我想要檢測何時點擊該行。 該線可以是水平的,垂直的或有角度的。 我有上線的那些信息:檢測點擊一行
-Starting座標(X,Y)
-Ending座標(X,Y)
-The鼠標點擊位置(x,y)的
我可能可以用tan()獲得角度。 我找到了這個解決方案,但是我不能添加鼠標事件:How to select a line
謝謝你。
我想找到一種方法來知道我是否點擊一行。我有一個標準的二維平面圖,例如正方形,兩者之間有一條直線。我想要檢測何時點擊該行。 該線可以是水平的,垂直的或有角度的。 我有上線的那些信息:檢測點擊一行
-Starting座標(X,Y)
-Ending座標(X,Y)
-The鼠標點擊位置(x,y)的
我可能可以用tan()獲得角度。 我找到了這個解決方案,但是我不能添加鼠標事件:How to select a line
謝謝你。
讓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²
。
我做了那樣的事情。 讓我們取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
比較斜坡有兩個缺點:1.它適用於無限長線條,不適用於線段,2.當您離開P1時,寬度越來越大。 – 2014-11-25 07:38:09
看一看這個答案:
Shortest distance between a point and a line segment
他們計算到段從點的最短距離。
已經計算出這個值,你可以接受或拒絕的鼠標點擊事件:
if (distanceToSegment(...) < threshold && mouseClicked()) {
// insert code here
}
閾值將取決於你想要如何精確的用戶可以。
如果我將線和鼠標點的終點與線的角度相同,是否意味着即時點擊該線? – ILoveWaffle 2014-11-24 19:02:00
我認爲區分線條和細分是很重要的。你所說的是對一條線而言是正確的,但對一個線段來說卻是正確的。您可以在細分受衆羣之外點擊。您需要檢查點是否也處於相同的X區間 – purpletentacle 2014-11-24 19:06:22
現在請記住,分辨率可能會非常高,您要爲用戶提供一定的誤差餘量。這就是計算距離可以得心應手並且會產生更可靠的方法的原因。 – purpletentacle 2014-11-24 19:08:16
尚未測試,我不知道它是否有幫助。 – ILoveWaffle 2014-11-24 20:46:31