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

看板MATLAB作者 (橋)時間15年前 (2011/02/14 20:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/7 (看更多)
沒錯 這是錯的 上次手邊沒資料憑印象打的 因為前幾年解這問題時 畫了很多個三角形 所以前置作業忘了 事實上分個部分 AB CD有無焦點 先看 角ACD 跟 角ACB 比較 若 角ACD 比 角ACB 大 或兩者 一正一負(角度的實是一正負) 則沒有焦點 反之則可能有焦點 此時再用上篇說的三角形的判定方法 當時因為有一堆AB線段跟一個CD線段辦定 所以程式碼如下 function out=ifcross(a,b,c,d) %ab線段和cd線段是否相交 若有回傳1 若無回傳0 %若ab為向量(多個線段)則回傳 cd間經過ab幾次 若有回傳次數 若無回傳0 ca = a-c; cb = b-c; cd = d-c; p = angle(cd./ca)./angle(cb./ca);%判斷夾角的狀況 p = (p>=0).*(p<=1); Aabc=p.*abs(ca).*abs(cb).*abs(sin(angle(cb./ca)));% 三角形ABC的面積 Aacd=p.*abs(ca).*abs(cd).*abs(sin(angle(cd./ca))); Abcd=p.*abs(cd).*abs(cb).*abs(sin(angle(cb./cd))); out = sum((Aacd+Abcd) > Aabc); %若相接或重疊也算的話是 >= ※ 引述《Leon (Achilles)》之銘言: : ※ 引述《bridge23 (橋)》之銘言: : : 這個問題我之前遇過 : : 後來自己想了一個方法 : : 用三角形的面積判斷 : : 假設AB連 CD連 : : 那 三角形ABC+三角形ABD > 三角形ACD 則表示有相交 : : 反之 三角形ABC+三角形ABD < 三角形ACD 則表示沒有相交 : 這不可能是對的. : Consider AB, CD, equal and parallel. : Tri(ABC) = Tri(ABD) = Tri(ACD) : 但 AB, CD 沒有相交. : : 若等於的話表示 剛好碰到 : : 這方法自認為還算單純 : 就我所知用投影判斷比較簡單. 去查演算法的課本應該有更好的做法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.151.18
文章代碼(AID): #1DMISbaq (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1DMISbaq (MATLAB)