計算幾何 線段

2021-06-08 03:41:58 字數 2336 閱讀 3506

首先是直線相交,這個簡單,就是看斜率,斜率不同則相交。

重點分析線段與線段相交,給你兩組座標p1(x1,y1),p2(x2,y2),q1(x3,y3),q2(x4,y4),判斷p1p2與q1q2是否相交:

首先可以很快排除下面四種情況:

對於第①種情況滿足條件:max(q1.x,q2.x)max(q1.x,q2.x)||

min(p1.y,p2.y)>max(q1.y,q2.y)||

max(p1.y,p2.y)對於下面兩種當以p1p2為對角線形成的矩形和以q1q2為對角線形成的矩形相交時,一種若是都在同側,肯定不相交,判斷條件是利用叉積的概念,我們知道三角形p1q2p2和

三角形p1q1p2的點的順序是相同的,那麼他們的叉積的乘積肯定大於0。

所以這個時候的判斷條件為:

#define exp 1e-6

double dx=multi(p1,p2,q1);

double dy=multi(p1,p2,q2);

double zx=multi(q1,q2,p1);

double zy=multi(q1,q2,p2);

return dx*dy<=exp&&zx*zy<=exp;

完整的判斷條件見下面的例題。

例題:poj 1410(線段與矩陣相交),意思簡單,給你兩個座標和矩陣的對角座標,判斷這條線段是否與矩陣相交。

#include#includeusing namespace std;

#define exp 1e-8

struct point

};point p1,p2,t[10];

double multi(point p0,point p1,point p2) //計算叉積

bool inter(point t1,point t2)

point(double n,double m):x(n),y(m){}

friend istream& operator>>(istream &cin,point &p)

bool operator

point pos;

cin>>pos;

sort(t,t+sum);

for(int i=1;i<=sum;i++)

cout例題3:poj 3304(線段與直線相交),意思是給你幾條線段,然後從這些線段的端點上任取兩個頂點構成的直線如果能夠與所有的線段相交,輸出yes!,否則輸出no!

反正這個計算幾何就像大數題一樣,煩的死的是精度和細節。這個題我是wa了n次。

注意點就是:如果輸入資料只有一組,直接輸出yes!,還有就是output裡面最後一句話要特別注意。如果兩點之間的距離<10^-8,那麼視為相等不做處理。

#include#include#include#includeusing namespace std;

const int max=210;

#define exp 1e-8

struct point

;struct line

;line l[max];

double dis(point p1,point p2)

bool inter(point p1,point p2,point q1,point q2) //直線與線段相交模板:點(p1,p2)是否與過點(q1,q2)的直線相交

int main()

{ int n,case;

scanf("%d",&case);

line temp;

while(case--)

{ scanf("%d",&n);

for(int i=0;i題4:poj 1556(門),這道題在nyoj 227(有趣的問題)出現過,題目意思是:

在乙個長寬均為10,入口出口分別為(0,5)、(10,5)的房間裡,有幾堵牆,每堵牆上有兩個缺口,求入口到出口的最短路經。

方法是將每扇門的上下起點和入口和出口作為無向圖的頂點,如果兩個點之間相互能夠直達則形成了無向圖的一條邊。兩點間的距離作為這條邊的權值,然後利用dijkstra演算法求最短路即可。

計算幾何 線段相交

問題描述 已知兩條線段p1p2和q1q2,判斷p1p2和q1q2是否相交,若相交,求出交點。兩條線段的位置關係可以分為三類 有重合部分 無重合部分但有交點 無交點。演算法的步驟如下 1.快速排斥實驗。設以線段p1p2為對角線的矩形為r,設以線段q1q2為對角線的矩形為t,如果r和t不相交,則兩線段不...

計算幾何札記 線段交

叉積求面積和直線交點座標模板 int n struct point point a max b max c max d max p max max double area max max ans point getpoint point p1,point p2,point p3,point p4 已...

計算幾何點,直線,線段模板

include include include include include include define pi acos 1 using namespace std struct point 點 向量 typedef point vector 向量使用點作為表示方法 結構相同 為了 清晰 con...