c#判斷線段是否相交:線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘(也就是向量積)來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖。
///
/// 線段是否相交
///
///線段p1p2的p1點
///線段p1p2的p2點
///線段q1q2的q1點
///線段q1q2的q2點
///
public static bool isintersect(pointf p1, pointf p2, pointf q1, pointf q2)
if (math.min(p1.x, p2.x) > math.max(q1.x, q2.x))
if (math.max(p1.y, p2.y) < math.min(q1.y, q2.y))
if (math.min(p1.y, p2.y) > math.max(q1.y, q2.y))
//跨立試驗
var crossp1p2q1 = vectorkits.cross(p1, p2, q1);
var crossp1q2p2 = vectorkits.cross(p1, q2, p2);
var crossq1q2p1 = vectorkits.cross(q1, q2, p1);
var crossq1p2q2 = vectorkits.cross(q1, p2, q2);
bool isintersect = (crossp1p2q1 * crossp1q2p2 >= 0) && (crossq1q2p1 * crossq1p2q2 >= 0);
return isintersect;
}
C 判斷線段是否相交
線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘 也就是向量積 來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖 線段是否相交 線段p1p2的p1點 線段p1p2的p2點 線段q1q2的q1點 線段q...
判斷線段相交
先判斷兩條線段是否不平行 最好同時判斷是否有交點並且不平行,因為浮點運算不精確 然後計算兩條線段的交點。以下是c語言 include include define eps 1e 8 define zero x x 0?x x eps 判兩直線平行 int parallel point u1,poin...
判斷線段相交
1.叉積的計算 為了確定兩個點的相對位置,可以使用叉積 有兩個點p1和p2,如果p1xp2 0,則p1位於p2的順時針方向,p1xp2 0,則p1位於p2的逆時針方向。p1的座標為 x1,y1 p2的座標為 x2,y2 則p1xp2 x1y2 x2y1 確定連續線段左轉還是右轉的問題,也可是使用叉積...