C 判斷線段是否相交

2022-02-04 01:52:44 字數 926 閱讀 8066

線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘(也就是向量積)來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖

/// /// 線段是否相交

///

/// 線段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 判斷線段是否相交

c 判斷線段是否相交 線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘 也就是向量積 來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖。線段是否相交 線段p1p2的p1點 線段p1p2的p2點 線段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 確定連續線段左轉還是右轉的問題,也可是使用叉積...