最近在做影象的透射變換,有乙個關鍵問題就是找到原影象內四邊形的四個頂點。
在處理過程中,經過霍夫直線檢測後,即可得到四邊形的四邊。而邊的表示形式為:[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 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...