python 計算兩直線交點

2021-08-19 19:27:54 字數 1628 閱讀 3861

最近在做影象的透射變換,有乙個關鍵問題就是找到原影象內四邊形的四個頂點。

在處理過程中,經過霍夫直線檢測後,即可得到四邊形的四邊。而邊的表示形式為:[x1,y1,x2,y2],即以兩點確定一條直線。

因此,需要通過編寫乙個函式計算兩直線交點。

首先,我們定義:直線l1:[x1,y1,x2,y2],直線l2:[x3,y3,x4,y4]

簡單解釋一下原理:

兩點確定一條直線,而每一條直線都可以表示為:y=kx+b 的形式(即直線的斜截式方程),找到兩條直線的斜截式方程後聯立方程組,求解。

聯立方程組為:

之後,推導計算公式

通過聯立的方程組,可以解得橫座標x為:

最後,考慮特殊情況

若某一直線為水平直線,斜率為0,此時交點縱座標直接取水平線上兩點任一點的縱座標。(該情況不會引起程式錯誤,因此未加考慮)

若某一直線為豎直直線,斜率不存在,此時交點橫座標直接取豎直線上兩點任一點的橫座標。(**考慮l2可能存在該情況)

若兩條直線均水平或均豎直,則無交點。(**未考慮該情況)

**

def cross_point(line1,line2):#計算交點函式

x1=line1[0]#取四點座標

y1=line1[1]

x2=line1[2]

y2=line1[3]

x3=line2[0]

y3=line2[1]

x4=line2[2]

y4=line2[3]

k1=(y2-y1)*1.0/(x2-x1)#計算k1,由於點均為整數,需要進行浮點數轉化

b1=y1*1.0-x1*k1*1.0#整型轉浮點型是關鍵

if (x4-x3)==0:#l2直線斜率不存在操作

k2=none

b2=0

else:

k2=(y4-y3)*1.0/(x4-x3)#斜率存在操作

b2=y3*1.0-x3*k2*1.0

if k2==none:

x=x3

else:

x=(b2-b1)*1.0/(k1-k2)

y=k1*x*1.0+b1*1.0

return [x,y]

對程式進行測試:
line1=[1,1,-1,-1]

line2=[-1,1,1,-1]

print cross_point(line1, line2)

結果如下,且正確:

程式設計環境為python2.7,直線的資料結構為列表。

若有任何問題歡迎交流~謝謝**

計算兩條直線的交點 C

ps 從其他地方看到的原始碼是有問題的。下面是修正後的 計算兩條直線的交點 l1的點1座標 l1的點2座標 l2的點1座標 l2的點2座標 public static pointf getintersection pointf linefirststar,pointf linefirstend,po...

求兩直線的交點

一般方程法 直線的一般方程為f x ax by c 0。既然我們已經知道直線的兩個點,假設為 x0,y0 x1,y1 那麼可以得到a y0 y1,b x1 x0,c x0y1 x1y0。因此我們可以將兩條直線分別表示為 f0 x a0 x b0 y c0 0,f1 x a1 x b1 y c1 0 ...

計算直線的交點數

time limit 1 sec memory limit 64 mb submit 820 solved 518 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...