版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、把點(diǎn)集凸包化Granham-Scan算法(使用水平序)#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using nameaace std;const int M=100000+5;struct Pointdouble x,y; pM;double dis(Point A,Point B)return sqrt(B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y);bool cmp(Point a,Point b)if (a.x&l
2、t;b.x) return true;if (a.x>b.x) return false;if (a.y<b.y) return true;return false;double Xdet(Point A,Point B,Point C)double x1,x2,y1,y2;x1=B.x-A.x;y1=B.y-A.y;x2=C.x-A.x;y2=C.y-A.y;return x1*y2-x2*y1; /大于0在左手邊,逆時(shí)針bool boM;Point ppM;int stackM; /from 1 to tvoid Gram_Scan(Point *p,int &n) /
3、p從1-n,把點(diǎn)集土包化 n*log(n);int i,t;sort(p+1,p+1+n,cmp);for(t=0,i=1;i<=n;i+)/合并排序if (i>1 && pi.x=pi-1.x && pi.y=pi-1.y) continue;p+t=pi;n=t;t=0;memset(bo+1,true,n*sizeof(bo0);if (n>0)stack+t=1;bostackt=false;if (n>1)stack+t=2;bostackt=false;if (n>2)for(i=3;i<n;i+)if(boi &
4、amp;& Xdet(pstackt-1,pstackt,pi)>=0) stack+t=i,boi=false;elsewhile(t>=2&& Xdet(pstackt-1,pstackt,pi)<0) bostackt=true,t-;stack+t=i;bostackt=false;for(i=n;i>=1;i-)if (boi && Xdet(pstackt-1,pstackt,pi)>=0) stack+t=i,boi=false;elsewhile(t>=2&&Xdet(pstackt-1
5、,pstackt,pi)<0) bostackt=true,t-;stack+t=i;bostackt=false;t-;for(i=1;i<=t;i+)ppi=pstacki;memcpy(p+1,pp+1,t*sizeof(Point);n=t;求凸點(diǎn)集的面積double area(Point *p,int n)double sum=0;int i;pn+1=p1;for(i=1;i<=n;i+)sum+=pi.x*pi+1.y-pi.y*pi+1.x;return sum/2.0;const double EPS=1e-9;const double maxn=1e6-1
6、;const double PI=acos(-1.);const int M=100+5;const double offset=11213;#define zero(x) (x)>0?(x):-(x)<EPS)struct Pointdouble x,y; pM;struct LINESEGPoint st,ed;struct LINEdouble a,b,c;double dist(Point a,Point b)return sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);double multiply(Point a,Point b,
7、Point c)return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);double dotmultiply(Point a,Point b,Point c)return (a.x-c.x)*(b.x-c.x)+(a.y-c.y)*(b.y-c.y);bool online(LINESEG L,Point q) LINE makeline(Point p1,Point p2)LINE tl;tl.a=p2.y-p1.y;tl.b=p1.x-p2.x;if (tl.a<EPS) tl.a=-tl.a,tl.b=-tl.b,tl.c=-tl.c;retu
8、rn tl;inline double MAX(double x,double y)return x>y?x:y;inline double MIN(double x,double y)return x<y?x:y;bool intersect(LINESEG u,LINESEG v)&& multiply(v.st,u.ed,u.st)*multiply(u.ed,v.ed,u.st)>=0&& multiply(u.st,v.ed,v.st)*multiply(v.ed,u.ed,v.st)>=0;bool intersect_A(L
9、INESEG u,LINESEG v)return intersect(u,v) && !online(u,v.st) && !online(u,v.ed) && !online(v,u.st) && !online(u,v.ed);bool intersect_L(LINESEG u,LINESEG v)return multiply(u.st,v.ed,v.st)*multiply(v.ed,u.ed,v.st)>=0;bool intersection_line(LINE L1,LINE L2,Point &i
10、nter)if (fabs(det)<EPS) return false;return true;bool intersection_lineseg(LINESEG u,LINESEG v,Point &inter)LINE L1,L2;L1=makeline(u.st,u.ed);L2=makeline(v.st,v.ed);if (intersection_line(L1,L2,inter) return online(u,inter) && online(v,inter);else return false;bool intersection_LLS(LIN
11、E L1,LINESEG u,Point &inter)LINE L2;L2=makeline(u.st,u.ed);if (intersection_line(L1,L2,inter) return online(u,inter);else return false;int Inside(Point q,int n)Point q2;const int on_edge=0;int i=0,count;pn=p0;while (i<n)for (count=0,i=0,q2.x=rand()+offset,q2.y=rand()+offset;i<n;i+)if (zero
12、(multiply(q,pi,pi+1) && (pi.x-q.x)*(pi+1.x-q.x)<EPS && (pi.y-q.y)*(pi+1.y-q.y)<EPS)return on_edge;else if (zero(multiply(q,q2,pi)break;else if (multiply(q,pi,q2)*multiply(q,pi+1,q2)<-EPS && multiply(pi,q,pi+1)*multiply(pi,q2,pi+1)<-EPS)count+;return count&1; b
13、ool cmp(Point p,Point q)if (p.x<q.x) return true;if (p.x>q.x) return false;if (p.y<q.y) return true;return false;/線段與多邊形相交定義為至少有1個(gè)點(diǎn)在多邊形內(nèi),返回true; bool LINESEG_intersect_Polygon(LINESEG LS1,int n) LINESEG LS2;Point mid;int i;int j,top;Point stackM;pn=p000;for(i=0;i<n;i+)LS2.st=pi;LS2.ed=pi
14、+1;if (intersect_A(LS1,LS2) return true;top=0;stacktop+=LS1.st;stacktop+=LS1.ed;for(i=0;i<n;i+)if (online(LS1,pi) stacktop+=pi;sort(stack,stack+top,cmp);stacktop=stack0;for(j=0;j<top;j+)mid.x=(stackj.x+stackj+1.x)/2;mid.y=(stackj.y+stackj+1.y)/2;if (Inside(mid,n) return true;return false;const
15、 int M=15000;struct Linedouble a,b,c;LM;struct Pointdouble x,y; pM,ppM;/由兩點(diǎn)化一般式Line LineChange(Point P1,Point P2) Line K;K.a=P2.y-P1.y;/(y2-y1)*x+(x1-x2)*y-(x1-x2)*y1-x1*(y2-y1)=0;counterclockK.b=P1.x-P2.x; return k;/求兩直線交點(diǎn)bool GetSegcross(Line K1,Line K2,Point &pp)if (fabs(det)<1e-8) return
16、0;return 1;/p在直線上返回0.00double p_on_line(Line K,Point p) /求兩點(diǎn)的垂直平分線void MidLine(Point P1,Point P2,Line &K)K.a=2*(P1.x-P2.x);K.b=2*(P1.y-P2.y);K.c=(-K.a*(P1.x+P2.x)-K.b*(P1.y+P2.y)/2;/求任意點(diǎn)對(duì)的最小距離,分治nlogn.double nearest(Point *p, int n) /p should already be sorted by xif(n=2) return dist(p0, p1);if(n=1) return INF;int m=pn/2.x,i,j; double left,right,tmp,ret,t;left=nearest(p,n/2);right=nearest(&pn/2,n-n/2);ret=tmp =left<right?left
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025海南省安全員-B證(項(xiàng)目經(jīng)理)考試題庫(kù)
- 2025年-遼寧省安全員知識(shí)題庫(kù)
- 2025青海省安全員B證考試題庫(kù)及答案
- 2025年湖北省安全員A證考試題庫(kù)附答案
- 2025遼寧建筑安全員考試題庫(kù)及答案
- 建筑用花崗巖開(kāi)采及建筑用碎石、機(jī)制砂加工項(xiàng)目可行性研究報(bào)告模板-備案拿地
- 英語(yǔ)英語(yǔ)時(shí)態(tài)課件
- 一年級(jí)語(yǔ)文《-jqx》課件
- 單位管理制度展示匯編【人事管理】
- 單位管理制度展示大全職員管理篇十篇
- 北師大版五年級(jí)數(shù)學(xué)下冊(cè)第3單元第2課時(shí)分?jǐn)?shù)乘法(二)課件
- 教育部中國(guó)特色學(xué)徒制課題:中國(guó)特色學(xué)徒制制度設(shè)計(jì)與運(yùn)行機(jī)制研究
- 城市規(guī)劃思想史
- 山東師范大學(xué)新聞采訪期末復(fù)習(xí)題
- 讓與擔(dān)保合同協(xié)議范本
- 住宅設(shè)計(jì)效果圖協(xié)議書(shū)
- 新版中國(guó)食物成分表
- 2024河南鄭州市金水區(qū)事業(yè)單位招聘45人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 食物損失和浪費(fèi)控制程序
- TCI 373-2024 中老年人免散瞳眼底疾病篩查規(guī)范
- 2024四川太陽(yáng)能輻射量數(shù)據(jù)
評(píng)論
0/150
提交評(píng)論