//判斷兩條直線是否相交
//每個線段的兩點都在另乙個線段的左右不同側,則能斷定線段相交
//公式對於向量(x1,y1)->(x2,y2),判斷點(x3,y3)在向量的左邊,右邊,還是線上.
//p=x1(y3-y2)+x2(y1-y3)+x3(y2-y1).p<0 左側, p=0 線上, p>0 右側
bool ::islinesegmentcross(point pfirst1, point pfirst2, point psecond1, point psecond2)
//判斷pfirst1和pfirst2是否在psecond1->psecond2兩側
linep1 = psecond1.x * (pfirst1.y - psecond2.y) + psecond2.x * (psecond1.y - pfirst1.y) + pfirst1.x * (psecond2.y - psecond1.y);
linep2 = psecond1.x * (pfirst2.y - psecond2.y) + psecond2.x * (psecond1.y - pfirst2.y) + pfirst2.x * (psecond2.y - psecond1.y);
if (((linep1 ^ linep2) >= 0) && !(linep1 == 0 && linep2 == 0))
//否則判為相交
return true;
}//可利用此函式對四邊形的四個點進行排列,使0->1->2->3->0剛好畫成乙個四邊形(對凹四邊形無效)
void ::sortpoint(vector&ppoint)
//判斷1->2是否和3->4相交
//如果相交轉換2和3的位置
if (islinesegmentcross(ppoint[0],ppoint[1],ppoint[2],ppoint[3]))
if (islinesegmentcross(parect.apoint[0],parect.apoint[2],parect.apoint[1],parect.apoint[3]))
if (islinesegmentcross(parect.apoint[0],parect.apoint[3],parect.apoint[1],parect.apoint[2]))
}//如果相交,計算出相交點(很簡單的數學知識)
//公式:(x-x1)/(y-y1) = (x1-x2)/(y1-y2)
// (x-x3)/(y-y3) = (x3-x4)/(y3-y4)
point ::functionintersection(point ori1,point ori2,point ext1,point ext2)
//還可以利用這個函式判斷乙個點是否在乙個四邊形內
//演算法:用這個點向乙個方向上,平行於x軸做一條直線,如果與此四邊形的四個邊相交的點數為奇數,那麼此點在四邊形內,如果為偶數,那麼在四邊形外
//判斷startpoint是否在四邊形rect內
void ::findpoint()
}else}}
if(0 != count%2)
}
如何判斷兩條直線是否相交
之前寫過一篇如何判斷兩條線段是否相交,我們緊接這個主題,再來談談如何判斷兩條直線是否相交 總體來上,判斷直線是否相交比判斷線段是否相交容易多了 兩條直線相交只有兩種情況 第一種 兩條直線斜率不相同 斜率不存在的情況算做一種斜率 第二種 兩斜率相同且截距也相同,即重合 如果這個相同的斜率都是斜率不存在...
判斷兩條線段 直線相交,並求交點
一.向量基本知識 因為後面的計算需要一些向量的基本知識,這裡只是簡單的列舉如下,如果需要更加詳細的資訊,可以自行搜尋wikipedia或google。1.向量的概念 如果一條線段的端點是有次序之分的,我們把這種線段成為有向線段 directed segment 如果有向線段p1p2的起點p1在座標原...
兩條線段是否相交
可以通過叉積來判斷兩條線段是否相交,ab ac與ab ad的結果為異號,並且 cd ca與cd cb的結果為 異號,則兩條直線相交。b相交.判斷兩線段是否相交 1 快速排斥試驗 設以線段 p1p2 為對角線的矩形為 r,設以線段 q1q2 為對角線的矩形為 t,若 r t 不相交,則兩線段不可能相交...