編程求取直線一般式表達式,兩直線交點


背景介紹

  最近在水面無人艇(USV)模擬仿真中,用到了一些點和線的關系求解,本文主要講述一下兩點確認直線,點到直線距離,兩條直線的交點等問題的解決方法,並給出python程序。部分內容非原創,文中給出鏈接,需要者可以參考。
  博客更新可參見github點線關系

兩點確定直線

表達式定義

  空間直線的表達式有多種,比如一般式Ax+By+C=0、點斜式y-y0=k(x-x0)、截距式x/a+y/b=1、兩點式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等,它們具有彼此的約束條件,如下所示。
直線方程的表達式
  由上可以看出來,一般式的適用范圍最廣,不需要單獨做處理和判斷,所以在計算機領域處理二維圖像數據中一般式用的最多。
  已知直線上的兩點P1(X1,Y1)和P2(X2,Y2),P1和P2兩點不重合,對於AX+BY+C=0,則有:

  • A=Y2-Y1
  • B=X1-X2
  • C=X2*Y1-X1*Y2

  推導兩點求直線的一般式方程的鏈接

python源代碼

def GeneralEquation(first_x,first_y,second_x,second_y):
    # 一般式 Ax+By+C=0
    # from http://www.cnblogs.com/DHUtoBUAA/
    A=second_y-first_y
    B=first_x-second_x
    C=second_x*first_y-first_x*second_y
    return A,B,C

點到直線距離

表達式定義

  設直線L的方程為Ax+By+C=0,點P的坐標為(x0,y0),則點P到直線L的距離為:

d=\frac{\left | A\times x0+B\times y0+C \right |}{\sqrt{A^{2}+B^{2}}}

  博客園對Markdown插入數學公式支持不友好,可以轉移到看github點線關系查看最新版。如果有博客園數學公式插入方法,歡迎留言指教。

兩條直線的交點

表達式定義

數學定義
  在已知直線兩點的情況下,利用上面的直線一般式可以求得直線的參數A、B和C,那么兩條直線的一般式表達可以列成二元一次方程組,其解即為兩條直線的交點坐標。注意處理兩條直線平行的特殊情況。

  根據二元一次方程的解,假設兩條直線的參數分別為A1,B1,C1和A2,B2,C2,那么兩條直線的交點可以表示為:
x=\frac{C2\times B1-C1\times B2}{A1\times B2-A2\times B1}

y=\frac{C1\times A2-C2\times A1}{A1\times B2-A2\times B1}

python源代碼

def GetIntersectPointofLines(x1,y1,x2,y2,x3,y3,x4,y4):
    # from http://www.cnblogs.com/DHUtoBUAA/
    A1,B1,C1=GeneralEquation(x1,y1,x2,y2)
    A2, B2, C2 = GeneralEquation(x3,y3,x4,y4)
    m=A1*B2-A2*B1
    if m==0:
        print("無交點")
    else:
        x=(C2*B1-C1*B2)/m
        y=(C1*A2-C2*A1)/m
    return x,y

  程序運行結果:兩直線交點為x=32.857142857142854,y=65.71428571428571,符合數學計算。部分內容參考自兩條線段是否相交,計算交點公式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM