判斷線段是否相交
跨立實驗
前提:如果兩線段相交,必定互相跨立。
也即是說:
1.p1 p2 在q1q2的兩側
2.q1q2 在p1p2的兩側
判斷兩點是否在一條直線的兩側就用到叉乘了。
(q1p1 x q1q2) * (q1q2 x q1p2) <= 0 表示p1p2在q1q2的兩側
(p1q2 x p1p2) * (p1p2 x p1q2) <= 0 表示q1q2在p1p2的兩側
poj 3304
注意 :
本題是double型別
判斷是否有重點 重點定義為座標非常接近的兩點 <1e-8即可
判斷叉乘之積時 只要<1e-8 即可
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int m,n;
const double eps = 1e-8;
const int maxn = 505;
int coun[maxn];
struct dia
dian[maxn]; // 每個點的橫縱座標
struct lin
line[maxn]; //上邊 下邊
double chaji(dia p0,dia p1,dia p2)//判斷點在直線哪一側,如果在左側<0,如果在右側,>0
//判段一條線段與其他線段相交
bool xiangjiao(dia a, dia b)
int main()
}
if (flag)
printf ("yes!\n");
else
printf ("no!\n");
}return 0;
}判斷兩直線相交,平行 或重合。
poj 1269
題目給出兩條線段的4個端點,判斷相交,平行還是重合,如果相交,則輸出交點橫縱座標。
需要注意: 1.先運用向量平行公式判斷是否平行,再用叉積公式判斷是否重合。
2.判斷重合還是平時的等於零,都應該用<1e-8次方表示。
判斷平行 ((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0說明向量平等。
判斷重合:
double line(dian p0,dian p1,dian p2)
fabs(line(d1,d3,d4)*line(d2,d3,d4))
判斷相交:
假設交點為p0(x0,y0)。則有:
(p1-p0)x(p2-p0)=0
(p3-p0)x(p2-p0)=0
展開後即是
(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0
(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0
將x0,y0作為變數求解二元一次方程組。
假設有二元一次方程組
a1x+b1y+c1=0;
a2x+b2y+c2=0
那麼x=(c1*b2-c2*b1)/(a2*b1-a1*b2);
y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
因為此處兩直線不會平行,所以分母不會為0。
就是一波推導,其實沒啥好寫的........
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int maxn = 1005;
const double eps = 1e-8;
using namespace std;
struct dian
d1,d2,d3,d4;
double line(dian p0,dian p1,dian p2)
bool panduan()
else
}int main()
printf("end of output\n");}
一點點感想
寫在這喧囂與寂寞的世界 今天我與chen在風初停的早上跑去借書,借了安妮的 清醒記 兩本三毛的書和一本yilan的旅行與味蕾的書。從圖書館出來,風似乎有些冷,想到又要到那陰冷的梅花館坐在又涼又硬的椅子上上一節乏味的數學課我們便都不約而同的想到了逃課。帶著心裡的負罪感我們躲進八食取暖。無意中我們嘗到了...
一點點感悟
這兩天一直在努力的調整狀態,考慮了很多,也想通了很多,因為看開了,所以狀態也好了很多。明白了,一件事情的兩面性,壞的一面會使自己痛苦不堪,好的一面會使自己心情愉快。看了一篇文章,感觸很大,裡面有很多啟發自己的語句。二十幾歲的人,除了愛情之外,還需要有一項能使自己生活的本領 要把自己的感觸 心情和生活...
一點點想法
最近公司要做個專案,用到進銷存系統,考查了好幾個,都不是很滿意 要麼功能上不行,要麼 上不行 突然在想,如果能用php做乙個,將是個不錯的選擇,因為進銷存大部分都是內部人使用,併發量要求並不是很高,主要是資料準確性和安全性,我想這兩方面重不在語言,另外乙個麻煩的地方是報表這塊,可以用其它語言來單獨處...