計算幾何之判斷線段相交

2021-08-07 04:36:18 字數 1272 閱讀 4627

【計算幾何】判斷線段相交

time limit:1000ms  memory limit:65536k

description

線段相交(linecross.pas/c/cpp)

【問題描述】

基本問題:判斷二維平面上的兩條線段是否相交。

注意:相交有很多種,這裡指的「相交」是指兩條線段恰好有唯一乙個不是端點的公共點,我們稱為「規範相交」。即如果一條線段的乙個端點恰在另一線段上,則不視為相交;如果兩條線段部分重合,也不視為相交,(這些情況我們稱為「非規範相交」)

input

輸入共兩行,每行四個實數,分別表示一條線段的兩個端點:(x1,y1),(x2,y2)

output

如果規範相交,則輸出「yes」

否則,輸出「no」

sample input

4 8 11 14

9 3 5 23

sample output

yes

source

gzoj1801

判斷線段相交的方法

快速排斥試驗和跨立試驗,這裡只講第二個,因為通過跨立試驗線段必定相交而通過快速排斥試驗不一定。

*注意:相交有很多種,這裡指的「相交」是指兩條線段恰好有唯一乙個不是端點的公共點,我們稱為「規範相交」。即如果一條線段的乙個端點恰在另一線段上,則不視為相交;如果兩條線段部分重合,也不視為相交,(這些情況我們稱為「非規範相交」)

**如下:

#include

#include

#include

using namespace std;

double x1_vector,y1_vector,x2_vector,y2_vector;

double multiplication_cross(double x1,double y1,double x2,double y2)

int main()

else printf("no");

}

計算幾何之判斷線段相交

兩條線段可以看作是兩個向量 一條線段跨立另一條線段的條件是 一條線段的端點分別到另一條線段兩個端點構成的向量在該線段兩側 可能不相交 而兩條線段互相跨立,即相交,就可判斷。模板分享 include include include include define equals a,b fabs a b ...

計算幾何之判斷線段相交

判斷線段相交可以用到之前講的判斷點與線段的位置關係的來實現。兩條線段相交的充要條件是 兩條線段都滿足 另一條線段的兩個端點分別位於當前線段的順時針方向和逆時針方向 那麼這兩條線段相交。這樣的話,就能用之前的ccw來解決了。題目 cgl 2 b ac include include using nam...

計算幾何 判斷線段相交(一)

兩個線段的交點個數可能有0個 1個或者無數個 判斷兩個線段相交,可以按照如下步驟 計算叉積時異號 計算叉積時異號 3.下面是判斷線段相交的程式 include include using namespace std define min x,y x define max x,y x y x y co...