兩條線段相交判斷學習理解


兩條線段相交判斷可以分為兩步:

1,快速排斥實驗

2,跨立實驗

詳細解釋:

第一步檢查以線段A為對角線的矩形和以線段B對角線的矩形是否相交,如果不相交則兩條線段必然不相交,可以快速排除,如果相交就繼續檢查是否有交點;

所以第一步也叫做快速排斥實驗,首先先進行第一步的研究:

      

如果知道,如果cd邊的最大點的x值小於ab邊的最小點的x值 ,或者cd邊最大點的y值小於ab邊的最小點的y值可以說明分別以兩線段為對角線的矩形不相交;

代碼表示如下:

max(C.x,D.x)<min(A.x,B.x)或者max(C.y,D.y)<min(A.y,B.y)

同樣也需要檢查上面的邊的代號反過來的:

max(A.x,B.x)<min(C.x,D.x)或者max(A.y,B.y)<min(C.y,C.y)

如果上面的四條判斷有一個為真,則代表兩線段必不可交,否則應該進行第二步判斷;

當通過第一步后會有下面四種可能:

跨立實驗:

如果兩線段相交那么就意味着它們互相跨立,即如上圖點A和B分別在線段CD兩側,點C和D分別在線AB兩側。

即向量(A-C)和(B-C)分別在向量(D-C)兩邊,則向量(A-C)和(D-C)的叉乘積與(B-C)和(D-C)的叉乘積符號相反,根據右手定則,它們的叉乘積方向一個向下一個向上,是方向相反的

平行線。則它們的點乘小於零。如果向量(A-C)和(B-C)在向量(D-C)同一側,則它們叉乘積同向,因為根據右手定則都向一個方向指向,所以它們是符號相同的平行線,即點乘大於零;

公式是:

((A-C)x(D-C))*((B-C)x(D-C))<0;

同樣需要證明向量(D-B)和向量(C-B)在向量(A-B)的兩側,((D-B)x(A-B))*((C-B)x(A-B))<0;這兩個同時成立才行;

但是對於中間那個圖,則不滿足上面的兩個公式了,它也是成立的;此時公式中該如何表達呢?

即當((A-C)x(D-C))*((B-C)x(D-C))=0 或者((D-B)x(A-B))*((C-B)x(A-B))=0時,下面給出行證明當這兩個公式等於零時為中間那個圖的情形

如果等於零,那么代表公式(A-C)x(D-C)或者(B-C)x(D-C)等於0,(它兩個不可能垂直在);

即(A-C)和(D-C)可能共線或者(B-C)和(D-C)可能共線,(或者另外兩對里面出現共線的),這樣他們就一定會是相交的。

 


免責聲明!

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



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