1. 程式人生 > >線段相交(快速排斥實驗 + 跨立實驗)

線段相交(快速排斥實驗 + 跨立實驗)

file end 一個點 hint -i tput 實驗 strong 數據

Description

給定線段P1P2(P1和P2是線段的兩端點,且不重合)、P3P4(P3和P4是線段的兩端點,且不重合),判斷P1P2和P3P4是否相交。P1P2和P3P4相交,即指存在一個點P,它既落在P1P2上又落在P3P4上(含線段的端點)。

Input

輸入數據有多組,第一行為測試數據的組數N,下面包括2N行,每組測試數據含2行,第一行為P1P2的坐標值,第二行為P3P4的坐標值,比如下面的數據 表示P1、P2、P3、P4的坐標分別為:P1(0,0),P2(1,1),P3(2,2),P4(3,3)

Output

判斷每組數據中的線段P1P2和P3P4是否相交,如果相交輸出YES,否則輸出NO。每組數據輸出占一行。

Sample Input

20 0 1 12 2 3 30 0 2 00 0 1 3

Sample Output

NOYES

Hint

兩線段相交分為“規範相交”和“非規範相交”。 “規範相交”指的是兩條線段恰有唯一一個不是端點的公共點;而如果一條線段的一個端點在另一條線段上,或者兩條線段部分重合,則視為“非規範相交”,本題是“非規範相交”。

定義點坐標類型時需用double

Solve:

先快速排斥實驗,然後跨立實驗,跨立實驗就是判斷是否有兩個點在一條線段兩段,這個叉積判斷下就好了

技術分享

技術分享

兩個跨立基本就是長這樣

線段相交(快速排斥實驗 + 跨立實驗)