matlab判斷線段和矩形是否相交,長方形中面和面相交的線段叫什么

matlab判斷線段和矩形是否相交
線段和矩形相交,換句話說就是線段上存在至少一個點落在矩陣
為了方便推導,把參數約定下:設線段兩個點坐標為r1、r2;矩陣中心坐標為r0,兩個軸的單位矢量為e1、e2,對應的邊長為2a、2b 。
線段上任意點可以表示為:r=λr1 (1-λ)r2 , 0≤λ≤1
點落在矩陣內部可以表示為:|(r-r0)?e1|≤a,|(r-r0)?e2|≤b
故線段和矩形相交轉化為以下數學問題:存在0≤λ≤1,滿足|[λr1 (1-λ)r2-r0]?e1|≤a,|[λr1 (1-λ)r2-r0]?e2|≤b 。
寫程序則需要具體的判斷步驟
判斷端點是否在矩陣內部,若|(r1-r0)?e1|≤a且|(r1-r0)?e2|≤b,則r1在矩陣內部;類似的判斷r2 。若兩者中有一個落在矩陣內部,則線段必定在矩陣內部;若兩者都在矩陣外部,做下面判斷
代入關系,知存在0≤λ≤1,滿足|λ(r1-r2)?e1 (r2-r0)?e1|≤a,|λ(r1-r2)?e2 (r2-r0)?e2|≤b 。
若(r1-r2)?e1==0,或(r1-r2)?e2==0,有前面的判斷,線段必然落在矩陣外部
否則,|λ (r2-r0)?e1/(r1-r2)?e1|≤a/|(r1-r2)?e1|,|λ (r2-r0)?e2/(r1-r2)?e2|≤b/|(r1-r2)?e2|,求得
【matlab判斷線段和矩形是否相交,長方形中面和面相交的線段叫什么】-a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1≤λ≤a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,-b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2≤λ≤b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2,取λ1=max(-a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,-b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2),λ2=min(a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2),若滿足λ1≤λ2