51Nod 1264 線段相交

2021-08-10 18:07:46 字數 1234 閱讀 5138

1264 線段相交

基準時間限制:1 秒 空間限制:131072 kb 分值: 0 

難度:基礎題

給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交(有乙個公共點或有部分重合認為相交)。 如果相交,輸出"yes",否則輸出"no"。

input

第1行:乙個數t,表示輸入的測試數量(1 <= t <= 1000)

第2 - t + 1行:每行8個數,x1,y1,x2,y2,x3,y3,x4,y4。(-10^8 <= xi, yi <= 10^8)

(直線1的兩個端點為x1,y1 | x2, y2,直線2的兩個端點為x3,y3 | x4, y4)

output

輸出共t行,如果相交輸出"yes",否則輸出"no"。
input示例

2

1 2 2 1 0 0 2 2

-1 1 1 1 0 0 1 -1

output示例

yes

no

51nod 1264-線段相交

思路:分別判斷 線段a是否與直線b相交,若都相交則 yes ,否則no

線段a與直線b相交:求出線段a的中點及兩個端點到直線b的距離 h0,h1,h2。若 h0*2==h1+h2則說明線段a在直線b的一側,不相交;否則相交

code:

#include#include#includeusing namespace std;

int t;

long long int l1[2][2];

long long int l2[2][2];

bool cross(long long int l1[2],long long int l2[2]);

int main()

return 0;

}bool cross(long long int l1[2],long long int l2[2])

else

}

另一思路是 用向量叉積來判斷線段相交(暫時沒看懂)

附上**:

#include int crossproduct(__int64 x1, __int64 y1, __int64 x2, __int64 y2)

int main()

else printf("no\n");

}return 0;

}

51nod 1264 線段相交

題目 給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交 有乙個公共點或有部分重合認為相交 如果相交,輸出 yes 否則輸出 no 這道題直接套白書裡面的模板就行 但是要注意的是因為白書給的那個模板不包含端點。所以我們這裡需要進行修改一下。包含了端點,所以自然點積就為0了。include incl...

51nod1264 線段相交

數學渣渣看了一下午各種找公式才明白 下面寫一下理解 判斷兩個線段相交與否。可以看成直線是否與線段相交 根據高數所學,向量的叉乘積,可以利用右手法則來判斷結果的方向。那麼如果兩種情況的方向乙個上,乙個下,那麼自然也就是不在直線的同側,那麼就滿足條件了。是有需要注意x,y用double型別,否則乘法會有...

51Nod 1264 線段相交

1264 線段相交 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交 有乙個公共點或有部分重合認為相交 如果相交,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 t...