首页 > 其他分享 >【模板】最小圆覆盖

【模板】最小圆覆盖

时间:2024-07-25 09:30:51浏览次数:19  
标签:begin end 覆盖 复杂度 最小 vmatrix bmatrix 模板

三点定圆

已知三个不在同一直线上的点 \((x_1, y_1), (x_2, y_2), (x_3, y_3)\)。请确定过此三点的圆的圆心。

设圆心为 \((x, y)\),半径为 \(r\),则圆的方程为

\[(x_i-x)^2+(y_i-y)^2=r^2 \]

展开得到

\[x_i^2-2x_ix+x^2+y_i^2-2y_iy+y^2=r^2 \]

我们并不需要现在得知 \(r\) 的具体值,即我们并不关心 \(r^2\)。不妨把未知数的平方项合并为一个常数 \(C\)。

\[2x_ix+2y_iy+C=x_i^2+y_i^2 \]

即我们现在需要求这个方程组的解:

\[\begin{bmatrix} x_1& y_1& 1\\ x_2& y_2& 1\\ x_3& y_3& 1\\ \end{bmatrix}\times \begin{bmatrix} 2x\\ 2y\\ C\\ \end{bmatrix}= \begin{bmatrix} x_1^2+y_1^2\\ x_2^2+y_2^2\\ x_3^2+y_3^2\\ \end{bmatrix} \]

根据克莱默法则,我们只需要求三个三阶行列式。

考虑到这三个行列式的最右边都是一列 \(1\),不妨将行列式沿着 \(1\) 展开,如:

\[\begin{vmatrix} x_1& y_1& 1\\ x_2& y_2& 1\\ x_3& y_3& 1\\ \end{vmatrix}= \begin{vmatrix} x_2& y_2\\ x_3& y_3\\ \end{vmatrix}- \begin{vmatrix} x_1& y_1\\ x_3& y_3\\ \end{vmatrix}+ \begin{vmatrix} x_1& y_1\\ x_2& y_2\\ \end{vmatrix} \]

也就稍微好写一点点。

最小圆覆盖

先看算法流程:

shuffle(a + 1, a + n + 1, mt19937{random_device{}()});
dot O = a[1];
double r = 0;
for (int i = 2; i <= n; i++) {
  if (dis(a[i], O) - r < eps) continue; // 在圆内
  O = a[i], r = 0;
  for (int j = 1; j < i; j++) {
    if (dis(a[j], O) - r < eps) continue;
    O = (a[i] + a[j]) / 2, r = dis(a[i], a[j]) / 2;
    for (int k = 1; k < j; k++) {
      if (dis(a[k], O) - r < eps) continue;
      O = minCircle(a[i], a[j], a[k]), r = dis(O, a[i]);
    }
  }
}

注意枚举顺序,\(i, j, k\) 都是从小往大枚举。

正确性证明

https://www.luogu.com.cn/article/8imn9rtw 不想抄了。这里补充最后一步的依据,是这个引理。

存在 \(

标签:begin,end,覆盖,复杂度,最小,vmatrix,bmatrix,模板
From: https://www.cnblogs.com/caijianhong/p/18322254/template-mincircle

相关文章

  • 简单HTML网页源代码bootstrap网页设计模板成品网站作业
    原创旅游主题bootstrap框架网页设计原创了一个以旅游城市为主题,以哈尔滨为内容的bootstrap框架网页设计,网站具有响应式(电脑端,平板端,手机端都可适应)。鑫风格简约,代码少且简单,符合初学者的水平。六个页面,页面之间可相互跳转,不想要的页面删了即可。有首页,美食列表,详细介绍,登......
  • 将子集点云注册到完整模板点云
    我正在生成点云,它们是包含凹痕信息作为彩色图的汽车部分,我需要将这些扫描转换为模板点云(即扫描点云是轿车的前端,模板点云是完全通用的轿车)。我希望将源点云凹痕信息应用到模板上正确的一般区域。我可以尝试任何预处理步骤吗?如果注册不是我所追求的,是否有其他技术可以实现我所追求......
  • FFT 高精度乘法模板
    #defineL(x)(1<<(x))constdoublePI=acos(-1.0);constintN=1e7+10;doubleax[N],ay[N],bx[N],by[N];charsa[N/2],sb[N/2];intsum[N];intx1[N],x2[N];intrevv(intx,intbits){intret=0;for(inti=0;i<bits;i......
  • 为什么C++模板只能在头文件中实现
    为什么C++模板只能在头文件中实现答案:模板的实现并非必须在头文件中。bug再现:当我尝试将模板的定义和实现分别保存在头文件(Foo.h)和实现文件(Foo.cpp)中时,程序在链接时报错:错误 LNK2019 无法解析的外部符号"public:void__cdeclFoo<int>::doSomething(int)"(?doSome......
  • vue的侦听器/表单输入绑定和模板引用
    1.侦听器侦听器在修改数据过程中,实时的侦听数据,将修改前数据和修改后数据记录2.表单输入绑定在input标签中输入v-model指令可以实时的显示input标签中输入的内容,v-model.lazy指令为不实时显示,在input标签中输入的内容用鼠标点击空白页面或ENTER后显示3.模板引用直接读取DOM......
  • [题解]P3187 [HNOI2007] 最小矩形覆盖
    P3187[HNOI2007]最小矩形覆盖调了半天居然是因为没判断浮点精度误差才\(\colorbox{IndianRed}{\texttt{\color{White}{WA}}}\)了\(3\)个点,其他都没有问题!警钟长鸣……首先有一个结论:凸多边形的最小外接矩形一定和它的一条边重合。这个结论,网上几乎找不到完整的证明,目前发现......
  • 最小生成树(Kruskal和Prim算法)
    最小生成树(Kruskal和Prim算法)部分资料来源于:最小生成树(Kruskal算法)_kruskal算法求最小生成树-CSDN博客、【算法】最小生成树——Prim和Kruskal算法-CSDN博客关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。强连通图:在有向......
  • 易优CMS模板标签field字段值输出指定栏目ID的下级栏目的文档列表
    【基础用法】标签:field描述:获取channelartlist标签里的字段值,field标签只能在channelartlist标签里使用。用法:{eyou:channelartlisttypeid='栏目ID'type='son'row='20'}<ahref='{eyou:fieldname='typeurl'/}'>{eyou:fieldname='typen......
  • 易优CMS模板标签relevarticle相关文档
    [基础用法]标签:relevarticle描述:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联。在没有tag标签情况下,就以前3个关键词检索文档标题进行关联。这个标签随着数据量的增加可能会比较影响检索性能。提示:使用该标签之前,必须先安装相关文档......
  • 易优CMS模板标签uibackground背景图片在模板文件index.htm中调用uibackground标签,实现
    【基础用法】标签:uibackground描述:背景图片上传标签,使用时结合html一起才能完成可视化布局,只针对具有可视化功能的模板。用法:<divclass="eyou-edit"e-id="文件模板里唯一的数字ID"e-page='文件模板名'e-type="background"style="background-image:url({eyou:uibackgrounde......