判斷線段相交

2021-06-22 09:24:11 字數 1016 閱讀 2906

1. 叉積的計算

為了確定兩個點的相對位置,可以使用叉積

有兩個點p1和p2,如果p1xp2<0,則p1位於p2的順時針方向,p1xp2>0,則p1位於p2的逆時針方向。

p1的座標為(x1,y1),p2的座標為(x2,y2)  則p1xp2=x1y2-x2y1

確定連續線段左轉還是右轉的問題,也可是使用叉積

有三個點p0,p1,p2   線段p0p1到p1p2左轉還是右轉,可以計算叉積(p1-p0)x(p2-p1)=(x1-x0)(y2-y0)-(x2-x0)(y1-y0),如果結果為正,向量p0p1在p0p2的順時針方向,如果叉積結果為負,向量p0p1在向量p1p2的逆時針方向。

2. 兩個線段的交點個數可能有0個 1個或者無數個

判斷兩個線段相交,可以按照如下步驟:

3.下面是判斷線段相交的程式:

# include using namespace std;

# include # define min(x,y) ((x)

# define max(x,y) ((x)>(y)?(x):(y))

const int n=100001;

int n;

struct point

;float direct(point i,point j,point k) //計算叉積

int f(point p1,point q1,point p2,point q2)

int main()

; point b=;

point c=;

point d=;

cout<

system("pause");

return 0;

}

判斷線段相交

先判斷兩條線段是否不平行 最好同時判斷是否有交點並且不平行,因為浮點運算不精確 然後計算兩條線段的交點。以下是c語言 include include define eps 1e 8 define zero x x 0?x x eps 判兩直線平行 int parallel point u1,poin...

怎樣判斷線段相交

一.向量基本知識 因為後面的計算需要一些向量的基本知識,這裡只是簡單的列舉如下,如果需要更加詳細的資訊,可以自行搜尋wikipedia或google。1.向量的概念 如果一條線段的端點是有次序之分的,我們把這種線段成為有向線段 directed segment 如果有向線段p1p2的起點p1在座標原...

C 判斷線段是否相交

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