簡體   English   中英

識別兩條線的交點

[英]Identification of the intersection point of two lines

這是計算

L1 =線連接點A(x1,y1)和B(x2,y2)L2 =線連接點c(x3,y3)和D(x4,y4)

對於線L1

線方程式:y = m1 * x + c1

斜率m1:(y2-y1)/(x2-x1)

Y截距:c1 =(y1-m1 * x1)

對於L2線

線方程式:y = m2 * x + c2

斜率m2:(y4-y3)/(x4-x3)

Y截距:c2 =(y3-m2 * x3)

對於交叉點

解決上述方程式,我們得到

x =(c2 -c1)/(m1-m2)

y =(c1 * m2-c2 * m1)/(m2-m1)

以上這些計算用於計算Java程序中的交點。

問題

當兩條線分別平行於x軸和y軸時,就會出現問題。 例如,如果連接點如下

L1 = A(34,112)B(34,180)...(x坐標值保持不變)

L2 = C(72,100)D(88,100)...(y坐標值保持不變)

現在m1將變為無窮大,並且m2將變為0,因此c1將變為無窮大,並且c2 = y3作為結果,盡管線L1和L2必須相交於(34,100),但使用以下給定公式計算交點會得出奇怪的(NaN)結果。

x =(c2 -c1)/(m1-m2)

y =(c1 * m2-c2 * m1)/(m2-m1)

為什么會有這樣的問題? 如何使用數學處理此問題,以便可以在程序中實現它。

平行於y軸的線不能表示為y = ax + b 您需要使用ax + by + c = 0的線的通用方程式。 確定兩條直線方程的系數,並求解它們的交點的線性系統。 確保系統的行列式不同於0,否則沒有解或無窮大(您可以考慮是無解的另一種情況)。

考慮段的法線向量,可以很容易地獲得ab系數(如果vect(AB) = (x,y)normal(AB) = (-y,x) = (a,b)然后確定c通過引入的坐標方程式中: c = -a*x_A - b*y_A

您現在有了一個線性系統來解決:

(S) : { a1*x + b1*y + c1 = 0    
      { a2*x + b2*y + c2 = 0

如果det = a1*b2 - a2*b1 = 0 (請注意精度損失,以epsilon方式進行比較),則系統沒有unic解。 否則,您可以找到系統矩陣的逆:

M = (a1  b1), M^(-1) = 1/det * ( b2  -b1) 
    (a2  b2)                   (-a2   a1) 

現在您只需要計算

M^(-1) * (-c1) = 1/det * (-b2*c1 + b1*c2)
         (-c2)           ( a2*c1 - a1*c2)

就是這樣,您有解決方案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM