解題思路:
已知直線p1p2,q1q2,只要判斷出p1,p2分布在直線q1q2兩側並且q1,q2在直線q1q2兩側,就能證明直線p1p2和q1q2相交。
如何證明p1,p2分布在直線q1q2兩側呢?
使用向量叉積運算:已知向量q1q2,q1p1,q1p2。q1q2與q1p1叉積的符號與q1q2與q1p2叉積的符號的符號相反即可。在計算叉積的時候就想是在計算行列式,線代忘的差不多了。具體的公式,原理請參考
解答的時候用了int型,看了好久才發現應該要用double型的。
原始碼附上:
#include using namespace std;
struct node
p1,p2,q1,q2;
void judge(node p1,node p2,node q1,node q2)
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...