Re: [運算] 怎算出兩條線有沒有交叉? 交點已回收

看板MATLAB作者 (羅羅亞)時間15年前 (2011/02/11 18:35), 編輯推噓4(403)
留言7則, 3人參與, 最新討論串2/3 (看更多)
借用部分程式 : % 先求兩條線方程式的係數 : % m*x -y=m*b(1)-b(2) : % Line1Coeff(1)*x+Line1Coeff(2)*y=Line1Coeff(3) : % 第1條線 : Line1Coeff(1)=(a(2)-b(2))/(a(1)-b(1)) ; : Line1Coeff(2)=-1 ; : Line1Coeff(3)=Line1Coeff(1)*b(1)-b(2) ; : % 第2條線 : Line2Coeff(1)=(c(2)-d(2))/(c(1)-d(1)) ; : Line2Coeff(2)=-1 ; : Line2Coeff(3)=Line2Coeff(1)*d(1)-d(2) ; 如果有直線方程式 把座標點代進去,在直線同側會得到相同正負的結果 就可以簡單判斷是否有交點 C1 = (Line2Coeff(1)*a(1)+Line2Coeff(2)*a(2)-Line2Coeff(3)) * (Line2Coeff(1)*b(1)+Line2Coeff(2)*b(2)-Line2Coeff(3)); C2 = (Line1Coeff(1)*c(1)+Line1Coeff(2)*c(2)-Line1Coeff(3)) * (Line1Coeff(1)*d(1)+Line1Coeff(2)*d(2)-Line1Coeff(3)); 若 C1 , C2 均為負 則無交點 -- 下面這樣的判斷方式如果要大量運算 光是求 min max 就爆炸了 : % 判斷交點是否在範圍內 : if IntersectX>=min(x1) && IntersectX<=max(x1) &&... : IntersectY>=min(y1) && IntersectY<=max(y1) &&... : IntersectX>=min(x2) && IntersectX<=max(x2) &&... : IntersectY>=min(y2) && IntersectY<=max(y2) : 'intersect' : else : 'no intersection' : end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.208.41

02/11 18:52, , 1F
座標點要代入什麼?????
02/11 18:52, 1F

02/11 18:53, , 2F
有沒有交叉不是看平行就可以了嗎??
02/11 18:53, 2F

02/11 18:55, , 3F
可以用係數的行列式來判定 也可以用方程式相減
02/11 18:55, 3F

02/11 20:01, , 4F
這是兩條線段,沒辦法用是不是平行判定有沒有交點
02/11 20:01, 4F

02/11 21:26, , 5F
算式用內積會好一些
02/11 21:26, 5F

02/11 22:17, , 6F
線段也可解~~方程式相減判斷範圍內是否過零點
02/11 22:17, 6F

02/11 22:18, , 7F
配合勘根定理正負變號即可判斷是否有解
02/11 22:18, 7F
文章代碼(AID): #1DLH48Ke (MATLAB)
文章代碼(AID): #1DLH48Ke (MATLAB)