版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c+_ConvexHull)问题的三种解法:暴GrahamScan,分治#include#include#include#include#include#include#include#include#includeusing namespace std;using namespace cv;#define e 3.3621e-4932Point2f pmin;bool SameSide(Point2f A,Point2f B,Point2f C,Point2f P)long double k = (long double)(A.y - B.y) / (A.x - B.x);long doub
2、le b = A.y - k * A.x;if (C.y - k*C.x - b = e & P.y - k*P.x - b = e) | (C.y - k*C.x - b = e & P.y - k*P.x - b = e)return true;elsereturn false;bool PointinTriangle1(Point2f A,Point2f B,Point2f C,Point2f P)return SameSide(A, B,C,P) & SameSide(B, C,A,P) & SameSide(C, A,B,P);bool cmpBy_yr(Point2f a, Poi
3、nt2f b)return a.y b.y;bool cmpBy_x(Point2f a, Point2f b)return a.x 0 | (v1 = 0 & m1 m2);void drawLine(vector points, vector p)vector left, right;int num = p.size();int miny_index = 0,maxy_index = 0;float k, b;Mat Draw_Convex_Hull(600, 600,CV_8UC3,Scalar(255, 255,255);for (int i = 0;i points.size();
4、i+)circle(Draw_Convex_Hull, pointsi, 1,Scalar(0, 0,0),1);for (int i = 0;i num;i+)if (pi.y pmaxy_index.y)maxy_index = i;k = (pmaxy_index.y - pminy_index.y) / (pmaxy_index.x - pminy_index.x);b = pmaxy_index.y - k*pmaxy_index.x;for (int i = 0;i 0)left.push_back(pi);elseright.push_back(pi);sort(right.be
5、gin(), right.end(), cmpBy_yr);sort(left.begin(), left.end(), cmpBy_yl);for (int i = 0;i right.size() - 1;i+)line(Draw_Convex_Hull,righti,righti+1, Scalar(0, 0,255),2);waitKey(30);for (int i = 0;i left.size() - 1;i+)line(Draw_Convex_Hull, lefti, lefti + 1, Scalar(0, 0,255),2);waitKey(30);line(Draw_Co
6、nvex_Hull, rightright.size() - 1, left0, Scalar(0, 0,255),2);line(Draw_Convex_Hull, leftleft.size() - 1, right0, Scalar(0, 0,255),2);imshow(Convex Hull, Draw_Convex_Hull);waitKey(0);void bruteForce(vector &p,vector &vec)int num = p.size();int min_index = 0;Point2f min = p0, tmp;vector flag(num,true)
7、;for (int i = 1;i num;i+)if (pi.y min.y)|(pi.y = min.y & pi.x min.x)min = pi;min_index = i;tmp = p0;p0 = min;pmin_index = tmp;vec.push_back(p0);for(int i = 1;i num;i+)for(int j = 0;j num;j+)for (int k = j+1; k num;k+)if (i != j&i != k)if (PointinTriangle1(pj, pk, p0, pi)flagi = false;for (int i = 1;
8、i num;i+)if (flagi)vec.push_back(pi);void grahamScan(vector &p,vector &vec)vector ang;int num = p.size();int min_index = 0;Point2f min = p0, tmp ,top1, top;vector flag(num, true);for (int i = 1;i num;i+)if (pi.y min.y) | (pi.y = min.y & pi.x min.x)min = pi;min_index = i;tmp = p0;p0 = min;pmin = min;
9、pmin_index = tmp;vec.push_back(p0);sort(p.begin() + 1,p.end(), cmpBy_ang);vec.push_back(p1);vec.push_back(p2);for (int i = 3;i 2)vec.pop_back();vec.push_back(pi);void Divide_Conquer(vector &p,int l, int r, vector &vec)if (r - l 3)return;if (r - l = 3)vec.insert(vec.end(), p.begin() + l, p.begin() +
10、r + 1);return;double countx = 0;for (int i = l; i = r; i+)countx += pi.x;countx /= (r - l + 1);int k = (l + r) / 2;vector temp_left, temp_right, answer;Divide_Conquer(p, k + 1,r, temp_right);Divide_Conquer(p, l, k, temp_left);temp_left.insert(temp_left.end(), temp_right.begin(), temp_right.end();gra
11、hamScan(p, answer);vec.insert(vec.end(),answer.begin(),answer.end();void Divide_Conquer_Warp(vector &p,vector &vec)sort(p.begin(), p.end(), cmpBy_x);Divide_Conquer(p, 0,p.size() - 1,vec);int main()float x, y;int num = 100;vector vp2f;vector con_hull;LARGE_INTEGER t1, t2, tc;QueryPerformanceFrequency
12、(&tc);srand(time(NULL);for (int i = 0;i num;i+)x = rand()*1. / (RAND_MAX / 500.);y = rand()*1. / (RAND_MAX / 500.);vp2f.push_back(Point2f(x, y);/bruteForce/* QueryPerformanceCounter(&t1); bruteForce(vp2f,con_hull); QueryPerformanceCounter(&t2); cout Point Numbers: num t Time of Brute Force: (t2.Quad
13、Part - t1.QuadPart)*1.0 / tc.QuadPart endl;drawLine(vp2f,con_hull);*/ Graham ScanQueryPerformanceCounter(&t1);grahamScan(vp2f, con_hull);QueryPerformanceCounter(&t2);cout Point Numbers: num t Time of Graham_Scan: (t2.QuadPart - t1.QuadPart)*1.0 / tc.QuadPart endl;drawLine(vp2f, con_hull);/ Divide and Conquer/* QueryPerformanceCounter(&t1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人力资源业务支持工作考核标准
- 科技公司运营经理面试题及解答指南
- 2025年健康食品研发及销售项目可行性研究报告
- 2025年餐饮行业供应链优化项目可行性研究报告
- 2025年新材料研究与应用项目可行性研究报告
- 2025年电商运营与物流服务优化可行性研究报告
- 2025年智能校园解决方案项目可行性研究报告
- 2025年城市海绵体建设项目可行性研究报告
- 2026年天府新区信息职业学院单招职业技能测试题库及答案详解1套
- 2026年重庆市自贡市单招职业倾向性测试题库附答案详解
- 急性中毒的处理与抢救
- 淤泥消纳施工方案
- 附表:医疗美容主诊医师申请表
- 跌落式熔断器熔丝故障原因分析
- 2023年全市中职学校学生职业技能大赛
- 毕节市织金县化起镇污水处理工程环评报告
- 河流动力学-同济大学中国大学mooc课后章节答案期末考试题库2023年
- 仓库安全管理检查表
- 岭南版美术科五年级上册期末素质检测试题附答案
- 以执业医师考试为导向的儿科学临床实习教学改革
- 一年级上册美术测试题
评论
0/150
提交评论