




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、把點(diǎn)集凸包化Granham-Scan算法(使用水平序)#include#include#include#includeusing 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.xb.x) return false;if (a.yb.y) return true;return false;double Xd
2、et(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) /p從1-n,把點(diǎn)集土包化 n*log(n);int i,t;sort(p+1,p+1+n,cmp);for(t=0,i=1;i1 & pi.x=pi-1.x & pi.y=pi-1.y) continue
3、;p+t=pi;n=t;t=0;memset(bo+1,true,n*sizeof(bo0);if (n0)stack+t=1;bostackt=false;if (n1)stack+t=2;bostackt=false;if (n2)for(i=3;i=0) stack+t=i,boi=false;elsewhile(t=2& Xdet(pstackt-1,pstackt,pi)=1;i-)if (boi & Xdet(pstackt-1,pstackt,pi)=0) stack+t=i,boi=false;elsewhile(t=2&Xdet(pstackt-1,pstackt,pi)0)
4、 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;i0?(x):-(x)EPS)struct Pointdouble x,y; pM;struct LINESEGPoint st,ed;struct LINEdouble a,b,c;double dist(Point a,Point b)re
5、turn sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);double multiply(Point a,Point b,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.
6、a=p2.y-p1.y;tl.b=p1.x-p2.x;if (tl.ay?x:y;inline double MIN(double x,double y)return x=0& multiply(u.st,v.ed,v.st)*multiply(v.ed,u.ed,v.st)=0;bool intersect_A(LINESEG 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,L
7、INESEG 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 &inter)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
8、(L1,L2,inter) return online(u,inter) & online(v,inter);else return false;bool intersection_LLS(LINE 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
9、;pn=p0;while (in)for (count=0,i=0,q2.x=rand()+offset,q2.y=rand()+offset;in;i+)if (zero(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(p
10、i,q2,pi+1)-EPS)count+;return count&1; bool cmp(Point p,Point q)if (p.xq.x) return false;if (p.yq.y) return true;return false;/線(xiàn)段與多邊形相交定義為至少有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;in;i+)LS2.st=pi;LS2.ed=pi+
11、1;if (intersect_A(LS1,LS2) return true;top=0;stacktop+=LS1.st;stacktop+=LS1.ed;for(i=0;in;i+)if (online(LS1,pi) stacktop+=pi;sort(stack,stack+top,cmp);stacktop=stack0;for(j=0;jtop;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 int M=15
12、000;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;/求兩直線(xiàn)交點(diǎn)bool GetSegcross(Line K1,Line K2,Point &pp)if (fabs(det)1e-8) return 0;return 1;/p在直線(xiàn)上
13、返回0.00double p_on_line(Line K,Point p) /求兩點(diǎn)的垂直平分線(xià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=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云計(jì)算服務(wù)模式演變下的云計(jì)算服務(wù)市場(chǎng)研究報(bào)告
- 2025年元宇宙虛擬藝術(shù)品市場(chǎng)交易活躍度分析與未來(lái)趨勢(shì)研究報(bào)告
- 數(shù)字化金融生態(tài)2025年開(kāi)放銀行構(gòu)建與合作模式創(chuàng)新趨勢(shì)研究報(bào)告
- 2025年醫(yī)藥行業(yè)CRO模式下的臨床試驗(yàn)方案設(shè)計(jì)與優(yōu)化報(bào)告
- 新一代大學(xué)英語(yǔ)(第二版)綜合教程1-U1-教師用書(shū) Unit 1 A new journey in life
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)服務(wù)標(biāo)準(zhǔn)化與行業(yè)規(guī)范化報(bào)告
- 線(xiàn)下演出市場(chǎng)復(fù)蘇中的市場(chǎng)潛力分析與競(jìng)爭(zhēng)格局報(bào)告
- 2025年船舶制造行業(yè)訂單分布與節(jié)能環(huán)保造船技術(shù)研究報(bào)告
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)SDN網(wǎng)絡(luò)架構(gòu)優(yōu)化與工業(yè)互聯(lián)網(wǎng)平臺(tái)可持續(xù)發(fā)展報(bào)告
- 北京安全監(jiān)理試題及答案
- 如何根據(jù)三視圖畫(huà)軸測(cè)圖及補(bǔ)視圖缺線(xiàn)課件
- 《水產(chǎn)養(yǎng)殖前沿講座》課程教學(xué)大綱
- 漁業(yè)成品油價(jià)格補(bǔ)助專(zhuān)項(xiàng)資金管理暫行辦法
- 水庫(kù)工程建設(shè)征地移民安置監(jiān)測(cè)評(píng)估本底調(diào)查報(bào)告
- 2023年06月新疆生產(chǎn)建設(shè)兵團(tuán)第十二師“三支一扶”招募高校畢業(yè)生筆試題庫(kù)含答案解析
- 基于C#的WinForm程序設(shè)計(jì)學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2023年
- 十堰市張灣區(qū)紅衛(wèi)街道社區(qū)工作者考試真題2022
- 突發(fā)性耳聾培訓(xùn)課件
- DB65T 3558-2013多浪羊飼養(yǎng)管理技術(shù)規(guī)程
- 計(jì)算機(jī)組成原理(山東科技大學(xué))知到章節(jié)答案智慧樹(shù)2023年
- 如何打造優(yōu)秀團(tuán)隊(duì)
評(píng)論
0/150
提交評(píng)論