版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、平面上有 n 个点,给定 n 个点的坐标,试找一个半径最小的圆,将 n 个点全部包围,点可以在圆上。1. 在点集中任取 3 点 A,B,C。2. 作一个包含 A,B,C 三点的最小圆,圆周可能通过这 3 点,也可能只通过其中两点,但包含第 3 点.后一种情况圆周上的两点一定是位于圆的一条直径的两端。3. 在点集中找出距离第 2 步所建圆圆心最远的 D 点,若 D 点已在圆内或圆周上,则该圆即为所求的圆,算法结束.则,执行第 4 步。4. 在A,B,C,D中选3个点,使由它们生成的一个包含这4个点的圆为最小,这 3 点成为新的 A,B,C,返回执行第 2 步。若在第 4 步生成的圆的圆周只通过
2、A,B,C,D 中的两点,则圆周上的两点取成新的 A 和 B,从另两点中任取一点作为新的 C。程序设计题解上的解题报告:对于一个给定的点集 A,记 MinCircle(A)为点集 A 的最小外接圆,显然,对于所有的点集情况 A,MinCircle(A)都是存在且惟一的。需要特别说明的是,当 A 为空集时,MinCircle(A)为空集,当 A=a时,MinCircle(A)圆心坐标为 a,半径为 0;显然, MinCircle(A)可以有 A 边界上最多三个点确定(当点集 A 中点的个数大于 1 时,有可能两个点确定了MinCircle(A),也就是说存在着一个点集 B,|B|=3 且 B 包
3、含与 A,有MinCircle(B)二MinCircle(A).所以,如果 a 不属于 B,则MinCircle(A-a)=MinCircle(A);如果 MinCircle(A-a)不等于MinCircle(A),则 a 属于 B。所以我们可以从一个空集 R 开始,不断的把题目中给定的点集中的点加入 R,同时维护 R 的外接圆最小,这样就可以得到解决该题的算法。不断添加圆,维护最小圆。如果添加的点 i 在圆内,不动,否则:问题转化为求11的最小圆: 求出1与I的最小圆, 并且扫描j=2l-1,维护(1)+(i)+(2j)的最小圆,如果找到 J 不在最小圆内,问题转化为:求(1J)+(i)的最
4、小圆。求出 I 与 J的最小圆,继续扫描 K=1j-1,找到第一个不在最小圆内的,求出 IJK 三者交点即可,此时找到了(1j)+(i)的最小圆,可以回到上一步(三点定一圆,所以 1J-1 一定都在求出的最小圆上)。实际上利用了这么个定理:若 I 不在 1l-1 的最小圆上,贝 UI 在 1l 的最小圆上。若 J 不在(i)+(1j-1)的最小圆上,贝 Uj 在(i)+(1J)的最小圆上。证明可以考虑这么做:最小圆必定是可以通过不断放大半径,直到所有以任意点为圆心,半径为半径的圆存在交点,此时的半径就是最小圆。所以上述定理可以通过这个思想得到。这个做法复杂度是 0(n)的,当加入圆的顺序随机时
5、,因为三点定一圆,所以不在圆内概率是 3/i,求出期望可得是 On.6.最小包围圆:坐标系上有多点画一个最小圆包含所有点求出这个圆的圆心坐标和半径本人解题思路:设想一个足够大的圆逐渐缩小这个圆并移动这个圆直到有两点在这个圆周上如果这两点的连线不是这个圆的直径那就说明还可以移动缩小这个圆直到出现另一个点在这个圆周上这个三个点所确定的圆就是所要求的圆。实现思路:先求出两点间的最长距离。以这两点的距离为直径画一个圆,如果包含了所有的点那么就是所求的解。如果不能包含就说明有三点及三点在这个圆上根据三点确定一个圆只要枚举出所有的三点成立的圆再比较所有成立的圆的半径最小的就是所求的点#include#in
6、cludestructTPointdoublex,y;TPointa1005,d;doubler;doubledistance(TPointp1,TPointp2)return(sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);doublemultiply(TPointp1,TPointp2,TPointp0)return(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);voidMiniDiscWith2Point(TPointp,TPointq,intn)d.x=(p.x+q.x)/2.0;d
7、.y=(p.y+q.y)/2.0;r=distance(p,q)/2;intk;doublec1,c2,t1,t2,t3;for(k=1;k=n;k+)if(distance(d,ak)=t2&t1=t3)d.x=(p.x+q.x)/2.0;d.y=(p.y+q.y)/2.0;r=distance(p,q)/2.0;elseif(t2=t1&t2=t3)d.x=(ak.x+q.x)/2.0;d.y=(ak.y+q.y)/2.0;r=distance(ak,q)/2.0;elsed.x=(ak.x+p.x)/2.0;d.y=(ak.y+p.y)/2.0;r=distance(ak
8、,p)/2.0;voidMiniDiscWithPoint(TPointpi,intn)d.x=(pi.x+a1.x)/2.0;d.y=(pi.y+a1.y)/2.0;r=distance(pi,a1)/2.0;intj;for(j=2;j=n;j+)if(distance(d,aj)=r)continue;elseMiniDiscWith2Point(pi,aj,j-1);intmain()inti,n;while(scanf(%d,&n)&n)for(i=1;i=n;i+)scanf(%lf%lf,&ai.x,&ai.y);if(n=1)printf(%.2lf%.2lf0.00n,a1.x,a1.y);continue;r=distance(a1,a2)/2.0;d.x=(a1.x+a2.x)/2.0;d.y=(a1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 啤酒糖化工诚信水平考核试卷含答案
- 亲子旅行春节活动方案策划(3篇)
- 农村钢丝桥施工方案(3篇)
- 乡村过年活动布置方案策划(3篇)
- 历史教育手工活动策划方案(3篇)
- 停车棚结构施工方案(3篇)
- 储煤场喷雾施工方案(3篇)
- 内墙哪种施工方案好用(3篇)
- 1-1-Bis-4-methoxyphenyl-4-4-bipyridin-1-ium-dichloride-生命科学试剂-MCE
- 后边坡防护施工方案(3篇)
- 监控清包工合同协议
- 植物地理学课件 高山植物学习资料
- 2025年少先队应知应会知识测试竞赛题库及答案
- 静脉输液管理制度
- 第25课《文言文二则曹冲称象》课件(五四学制)语文六年级上册
- 大象版六年级心理健康教育全册教案
- 浙教版小学劳动六年级《项目一创意改造提效率-劳动工具的改进》教案
- 2023 年 5 月全国事业单位联考 C 类《综合应 用能力》及参考答案
- 坐标纸(A4纸直接打印就可用)
- 兽医流行病学 第七章 描述流行病学
- LY/T 2749-2016桉树速丰林配方施肥技术规程
评论
0/150
提交评论