随机增量算法(a randomized incremental algorithm)

#define sqr(x) ((x)*(x))
#define EPS 1e-4struct P{double x, y;P(double x, double y):x(x),y(y){}P(P &a, P &b):x(b.x-a.x),y(b.y-a.y){}P(){}P mid(P &a){return P((a.x+x)/2, (a.y+y)/2);}double cross(P &a){return x*a.y-y*a.x;}double len2(){return sqr(x)+sqr(y);}double dis(P &a){return sqrt(sqr(x-a.x)+sqr(y-a.y));}void print(){printf("%f %f\n", x, y);}
};struct Disc{P o;double r;bool cover(P &a){return r-o.dis(a) >= -EPS;}Disc(){}Disc(P &o, double r):o(o),r(r){}Disc(P &a, P &b):o(a.mid(b)), r(a.dis(b)/2){}Disc(P &a, P &b, P &c){double t1=b.len2()-a.len2();double t2=c.len2()-a.len2();P p1(a, b), p2(a, c);double t3=p1.cross(p2)*2;P p3(t1, p1.y), p4(t2, p2.y);P p5(p1.x, t1), p6(p2.x, t2);o=P(p3.cross(p4)/t3, p5.cross(p6)/t3);r=o.dis(a);}
};Disc MinDisc(vector<P> &p){if(p.size()<=1) return Disc();random_shuffle(p.begin(), p.end());Disc d(p[0], p[1]);for(int i=2; i<p.size(); i++)if(!d.cover(p[i])){d=Disc(p[0], p[i]);for(int j=1; j<i; j++)if(!d.cover(p[j])){d=Disc(p[i], p[j]);for(int k=0; k<j; k++)if(!d.cover(p[k]))d=Disc(p[i], p[j], p[k]);}}return d;
}

转载于:https://www.cnblogs.com/Patt/p/4975878.html

最小圆覆盖(Smallest Enclosing Discs)相关推荐

  1. 最小球覆盖最小圆覆盖 题目总结

    最小圆覆盖: HYSBZ 1337 最小圆覆盖 给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点 Input 第一行给出数字N,现在N行,每行两个实数x,y表示其坐标. O ...

  2. HDU2215(最小圆覆盖问题)

    题意:就是求最小圆覆盖问题 方法一: #include<iostream> #include<algorithm> #include<cmath> #include ...

  3. 【hdoj】3007 Buried memory 【计算几何--最小圆覆盖】

    传送门:Buried memory 苍天饶过谁,第三次在hdoj上 交计算几何的题了,没一次是AC的. ┭┮﹏┭┮都是模板题啊,我都是抄板子的啊,为什么会这样,我怎么这么菜. 题意: 求最小圆覆盖 的 ...

  4. hdu 2215(最小圆覆盖)

    解题思路:最小圆覆盖,注意由于树也有半径,所以要加上树的半径0.5 #include<iostream> #include<cmath> #include<cstdio& ...

  5. POJ 2069最小球覆盖 HDU3007最小圆覆盖【模拟淬火算法】

    POJ 2069最小球覆盖 1.给定N个三维点,要求覆盖这些点的最小球半径: 2.采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前最远的点靠近: 3.这是一个不断调整的过程,对应模拟淬火算法 ...

  6. ZOJ - 1450 Minimal Circle HDU - 3007 Buried memory 最小圆覆盖模板 【随机函数】【增量法】

    题意 给N个点,求最小的圆将这N个点全部覆盖,输出圆心坐标和半径 分析 最小的圆肯定落在三个点上,因此暴力枚举圆上的三个点即可,点增量算法O(n ^ 3),加入随机化,平均复杂度可以降到O(n^2) ...

  7. P1742 最小圆覆盖

    P1742 最小圆覆盖 题意: 给出N个点,让你画一个最小的包含所有点的圆. 题解: 先说结论: 最优解的圆一定是在以某两个点连线为直径的圆 或者 某三个点组成的三角形的外接圆 初始化将某个圆心定为第 ...

  8. ZOJ 1450 Minimal Circle 点集的最小圆覆盖

    From: http://blog.csdn.net/zmx354/article/details/17076267 给定一个点集,求出能覆盖点集内所有点的半径最小的圆.包含点在圆上的情况.个人感觉算 ...

  9. luoguP1742 最小圆覆盖

    最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) {if(P[i] 不在 C 内) {C = {P[i], 0};for(j=1 to i-1) {if(P[ ...

最新文章

  1. CentOS 6.x limits changed on a existing running process
  2. 修改注册表实现程序开机自启动
  3. 甩开镣铐的精神舞蹈:推荐长篇小说《炼狱之花》
  4. 天天写日记争当文艺青年 2014-5-13
  5. LeetCode 294. 翻转游戏 II(记忆化递归)
  6. 01-第一章 Java开发中通用的方法和准则
  7. npm 报错cb.apply is not a function
  8. Arturia Analog Lab for Mac - 原始混合合成器
  9. USB Server应用于RPA机器人案例分析
  10. 微博媒体碎片装订版-Arrange01
  11. 软件测试 - 功能测试(测试理论+用例设计)
  12. __FILE__, __FUNCTION__, __LINE__学习篇,谨以此文告别那无知的岁月
  13. 基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析
  14. 程序员的数学---数学思维的锻炼
  15. 智能家居控制系统的功能和特点
  16. MindMaster支持全平台、云储存的思维导图工具
  17. 如何查询软件著作权登记证书信息?软著登记证书查询网址?
  18. Unity实战之模拟飞碟
  19. iOS实现截屏并保存到相册
  20. 自写app与树莓派制作智能小车

热门文章

  1. java中文件选择对话框
  2. 使用HashiCorp Nomad按需分配容器存储
  3. spring mvc事务没有生效的原因
  4. 统计操作系统的整个系统负载占用CPU的情况
  5. 01.几张图轻松理解String.intern()
  6. 【Scratch】青少年蓝桥杯_每日一题_4.13_猫捉老鼠
  7. Java Stringbuilder简单介绍
  8. Springboot+JPA 对应关系查询时导致的堆栈溢出 :java.lang.StackOverflowError:
  9. mysql有两个结果集,MySQL:两个结果集的差异
  10. 微信小程序点播插件_小程序云直播amp;云点播插件限时降价了!!!