当前位置: 首页 > 知识库问答 >
问题:

如何选择复盖另一个圆的最小圆集?

顾兴昌
2023-03-14

我正在寻找一些解决方案,如果给定一组具有2D中心点和半径的圆,则在s中返回一个最小子集m,该子集完全覆盖具有2D中心点和半径的特定圆。最后一个圆圈不在s中。

我已经选择了圆形,但如果我们把它们改成正方形、六边形等也没关系。

共有1个答案

汪兴为
2023-03-14

你有两个截然不同的问题:你需要把几何问题变成组合问题,然后你需要解决组合问题。对于后者,你正在研究一个最小集合覆盖问题,应该有很多关于它的文献。就我个人而言,我喜欢Knuth的舞蹈链接方法来列举一个集合覆盖的所有解决方案,但我想对于一个最小的解决方案,你可以做得更好。CPLEX公式(与您的标记匹配)将为每一行使用二进制变量,为每列使用≥1个约束。

现在,关于将几何学转化为组合学。你所有的圆圈的所有线条把平面分成一堆区域。这些区域是用线划分的。特别相关的是两个或多个圆圈相交的点。这些点之间的直线的确切形状不太相关,你可以想象直接拉这些弧,得出一个更经典的平面图表示。计算所有圆之间的成对交点。按角度排序单个圆的所有交点,并按该顺序将它们与图边相连。对所有圈子都这样做。然后,您可以做一种桶填充,以确定每个圆中哪些图形面在内部,哪些面在外部。

现在,您有了设置覆盖的矩阵:大圆内的每个图形面都是您需要覆盖的列。每一个圆都是一排,并且覆盖了其中的一些面,你知道哪一个。

 类似资料:
  • 将求解第一个点的第一个圆放置在适当位置。 通过检查这两个点之间的距离是否小于2*r来求解最小圈数中的第二个点。并继续处理所有n个点。我认为是贪婪算法,但它是最优的,线性的吗?

  • 一个圆覆盖一个点,如果该点位于圆内。如果一个点与圆心的距离小于或等于r,则该点位于圆内。

  • 问题内容: 我有点麻烦。我有一项作业,要求我找出第二个圆圈是否重叠,内部是否重叠或两者都不存在。但是,我在检查重叠以及第二个圆是否在第一个圆内时遇到了麻烦。 (使用的变量为x1,x2,y1,y2,r1,r2,距离) 这是我所拥有的: 我担心问题在于重叠和内部检查,但是我无法弄清楚如何正确设置它,因此我可以可靠地检查第二个圆是否在第一个圆的内部。 当我尝试了多种方法时,任何帮助或建议都将不胜感激,但

  • 我有一个Java Swing任务,目标如下: 当程序启动时,它会绘制20个未填充的圆,每个圆的半径和位置随机确定。 如果一个圆的周长线不与任何其他圆相交,则用红色画出该圆的轮廓。如果它至少与另一个圆相交,请用黑色绘制它。 添加一个JButton,每次按下JButton,就会创建一组新的圆,如上所述。 这些圆相距太远,不能共享一个周长点,即它们中心之间的距离大于它们半径的和(d>r1+r2)。示例。

  • 对于三维点云,有没有一种算法可以找到半径最小的圆柱体?我知道2D最小包围圆的情况是可以解决的(例如Python中的线程最小包围圆,代码错误),但对于3D有什么工作方法吗? 编辑1:OBB。下面是一个圆弧状点云的例子。这个工具可以找到最小的封闭圈https://www.nayuki.io/page/smallest-enclosing-circle 圆是由三个点定义的,其中两个点几乎位于一个直径上,

  • 本文向大家介绍iOS设置可选择圆角方向的控件圆角,包括了iOS设置可选择圆角方向的控件圆角的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章主要给大家介绍利用iOS如何设置可选择圆角方向的控件圆角,话不多说,以下是实现的示例代码,一起来看看吧。 示例代码 一、通过设置控件layer的cornerRadius来设置圆角 二、通过贝塞尔曲线来设置圆角 总结 以上就是这篇文章的全部内容了,希望本文