用最少数量的固定半径圆完全覆盖一个矩形

2024-03-29

我已经有这个问题好几年了。不久前,这是我镇上的一场信息学竞赛。我没能解决,我的老师也没能解决。我还没有遇到能够解决这个问题的人。我认识的人都不知道给出答案的正确方法,所以我决定将其发布在这里:

泽问题

给定一个 X × Y 的矩形,找到具有固定给定半径 R 的最小圆数 N,以完全覆盖矩形的每个部分。


我想过解决的办法,但没有什么确定的。如果每个圆定义一个内部矩形,那么R^2 = Wi^2 + Hi^2, where Wi and Hi是每个圆所覆盖的实际区域的宽度和高度i。起初我想我应该做Wi等于Wj对于任何i=j,同样对于H。这样,我可以通过使宽度/高度比等于主矩形(Wi/Hi = X/Y)。那样,N=X/Wi。但这个解决方案肯定是错误的,以防万一X大大超过Y或相反亦然。
第二个想法是Wi=Hi对于任何给定的i。这样,正方形就能最有效地填充空间。但是,如果仍然存在非常窄的条带,则使用矩形来填充它会更理想,或者更好 - 也对之前的最后一行使用矩形。
然后我意识到这些想法都不是最佳的,因为我总能找到更好的方法来做到这一点。它总是接近最终,但不是最终。

Edit
在某些情况下(大矩形),连接六边形似乎是比连接正方形更好的解决方案。

Further Edit
Here's a comparison of 2 methods: clover vs hexagonal. Hexagonal is, obviously, better, for large surfaces. I do think however that when the rectangle is small enough, rectangular method may be more efficient. It's a hunch. Now, in the picture you see 14 circles on the left, and 13 circles on the right. Though the surface differs much greater (double) than one circle. It's because on the left they overlap less, thus waste less surface. Hexagonal vs clover

问题仍然存在:

  1. 正六边形图案本身是最佳的吗?或者应该对主矩形的某些部分进行某些调整。
  2. 有理由不使用规则形状作为“最终解决方案”吗?
  3. 这个问题还有答案吗? :)

对于与 R 相比较大的 X 和 Y,六边形(蜂窝)图案接近最佳。 X 方向圆心之间的距离为sqrt(3)*R。 Y 方向上的行间距为3*R/2,所以你大约需要X*Y/R^2 * 2*/(3*sqrt(3))界。

如果使用方形图案,水平距离会更大(2*R),但垂直距离要小得多(R),所以你需要X*Y/R^2 * 1/2界。自从2/(3*sqrt(3) < 1/2,六边形图案是更好的选择。

请注意,这只是一个近似值。通常可以稍微调整一下常规图案,以使某些东西适合标准图案不适合的地方。如果 X 和 Y 与 R 相比较小,则尤其如此。

就您的具体问题而言:

  1. 六边形图案是整个平面的最佳覆盖。当 X 和 Y 有限时,我认为通常可以获得更好的结果。一个简单的例子是当高度小于半径时。在这种情况下,您可以将一行中的圆进一步移开,直到每对圆的交点之间的距离等于 Y。

  2. 具有规则模式会对解决方案施加额外的限制,因此在这些限制下的最佳解决方案在删除这些限制后可能不是最佳的。一般来说,稍微不规则的图案可能会更好(请参阅 mbeckish 链接到的页面)。

  3. 同一页面上的示例都是具体的解决方案。具有更多圆圈的解决方案有点类似于六边形图案。尽管如此,似乎还没有一个封闭式的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用最少数量的固定半径圆完全覆盖一个矩形 的相关文章

  • O(mn) 比 O((m+n)^2) 更好吗?

    算法的输入是m and n 我的算法的时间复杂度是O mn 我有一个时间复杂度为的基准算法O m n 我的实现在时间复杂度方面是否优于基准 许多评论者和回答者希望只考虑以下情况 m n或者至少当它们通过一个常数因子相关时 这不是它的工作原理
  • CPU是如何做减法的?

    我有一些基本的疑问 但每次我坐下来尝试面试问题时 这些问题和我的疑问就会出现 假设 A 5 B 2 假设A和B都是4字节 那么CPU是怎么做的呢 A B添加 我知道 A 的符号位 MSB 为 0 表示正值 B 的符号位为 1 表示负整数 现
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 确定范围是否重叠

    给定两个具有整数开始时间和结束时间的事件 E1 s1 e1 E2 s2 e2 实现快速布尔检查以查看事件是否重叠 我有解决方案 但我很想看看其他人想出了什么 编辑 好的 这是我的解决方案 e1 gt s2 s1 gt s2 e2 lt s1
  • 检查数独字段的很酷的算法?

    有谁知道一个简单的算法来检查数独配置是否有效 我想出的最简单的算法是 对于大小为 n 的板 伪代码 for each row for each number k in 1 n if k is not in the row using ano
  • 以一定角度遍历二维数组

    通常我们按行或列遍历数组 但这里我想以角度遍历它 我会尝试解释我的意思 因此 假设角度是 45 度 那么它会搜索为 0 0 then 0 1 1 0 then 0 2 1 1 2 0 等等 抱歉 无法上传图像 因为我是新用户 不允许这样做
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 按百分比减少多边形面积

    我有一个由点 x y 组成的多边形 我想做的是将其减少一个百分比 请记住 我不想只是扩大规模 多边形应该有一种内部边界 其宽度取决于百分比 该内部边界被多边形切断 谁知道可以实现这一目标的算法 输入 点数组 百分比 输出 点数组 你所寻求的
  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 从日志文件中获取前 100 个 URL

    我的一位朋友在接受采访时被问到以下问题 谁能告诉我如何解决它 我们有一个相当大的日志文件 大约 5GB 日志文件的每一行都包含一个用户在我们网站上访问过的 URL 我们想要找出用户访问最多的 100 个 URL 怎么做 如果我们有超过 10
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2

随机推荐

  • 如何在 C# 中使用 SendMessageTimeout 获取窗口标题

    我需要枚举所有打开的窗口并获取它们的标题 但问题是某些窗口属于同一进程但属于不同的线程 该线程被阻塞 等待互斥体 因此 我不能对属于我自己的进程的窗口使用 GetWindowText 因为这将导致 SendMessage 调用 这将阻止我的
  • 向类型类实例添加类约束

    我正在尝试实现康托配对函数 作为 通用 Pair 类型类 如下所示 module Pair Pair CantorPair where Pair interface class Pair p where pi a gt a gt p a k
  • 如何使用 C++ 从 RAM 运行可执行文件?

    如何使用 C 从 RAM 运行可执行文件 可执行文件位于 RAM 中 并且我知道地址 如何从我的程序中调用该程序 这类事情通常来自世界的黑暗角落 结合像metasploit这样的工具 用内存创建进程会很棒 因此一些人尝试重新实现Create
  • 向应用程序小部件发送更新广播

    我有一个带有配置活动的应用程序小部件 我想在单击活动中的 确定 按钮时触发小部件的更新 我写了这段代码 Intent initialUpdateIntent new Intent AppWidgetManager ACTION APPWID
  • 为什么 firefox/chrome 显示的页面与 IE8 不同?

    当我看着 我看到最新版本 with Firefox and Chrome 但是一个旧版本 with IE8 另外 通过屏幕抓取PHP Curl给我一个旧版本 我试过了CTRL 刷新在 IE8 中 但我无法让它向我显示最新版本 无论heade
  • 警告:格式字符串不是字符串文字[重复]

    这个问题在这里已经有答案了 我从以下行收到 格式字符串不是字符串文字 警告 NSString formattedString NSString alloc initWithFormat format arguments valist 我在以
  • 从 Delphi 7 中的 C++ DLL 接收字符串数组

    我正在用 C 创建一个 DLL 它将在 Delphi 7 项目中使用 这个问题与this one https codereview stackexchange com questions 43347 produce an array of
  • 尝试从列表中删除对象时迭代期间的并发修改

    我试图在多个列表中循环 最后比较它们的名称 如果它们不匹配 则将其从列表中删除 但我收到此错误 迭代期间并发修改 虽然我已经复制了原始列表只是为了避免这个错误 但仍然得到它 我尝试的是 globals filteredPollsList p
  • 在 R 中获取生存估计

    我试图获得不同人在特定时间的生存估计 我的代码如下 s Surv outcome 1 outcome 2 survplot survfit s person list 1 plot survplot mark time FALSE summ
  • 什么是serialVersionUID?为什么要使用它?

    当出现以下情况时 Eclipse 会发出警告serialVersionUID不见了 可序列化类 Foo 未声明静态final long 类型的serialVersionUID 字段 What is serialVersionUID为什么它很
  • 如何优化Excel VBA点击url

    VBA 运行时出现运行时错误 70 有时代码运行顺利 但有时则不然 想知道是否有更可靠的代码可以继续 它总是停在If link innerHTML Balance Sheet Then end if Public Sub Get Dim i
  • 如何以编程方式将 QMainWindow 大小调整为其最小大小

    当我有一个带有网格布局的 QMainWindow 时 当用鼠标调整它的大小时 它不会低于其中所有控件正确显示所需的最小尺寸 在我的应用程序中 我有时会以编程方式隐藏控件 但随后窗口保持相同的大小 其余控件看起来分散开来 它们之间的空间太大
  • 将图像文件打开到 WriteableBitmap

    问题就在这里 我想从本地驱动器打开一个文件 然后将其放入 WritableBitmap 中 以便我可以编辑它 但问题是 我无法从 Uri 或类似的东西创建 WritableBitmap 我也知道如何将文件打开到 BitmapImage 中
  • 设置EditText的HINT多行

    我知道我可以更改 EditeText 文本的行数 但我也可以更改 EditText 提示的行数吗 我在网上找不到解决方案 谢谢您的帮助 My Code Override public void onCreateOptionsMenu Men
  • 在控制台窗口中以横向树格式漂亮打印输出

    我有一本使用 Python 创建的字典 d a Adam Book 4 b Bill TV 6 Jill Sports 1 Bill Computer 5 c Bill Sports 3 d Quin Computer 3 Adam Com
  • 为什么我的 scrapy 蜘蛛没有遵循我的项目解析函数中的请求回调?

    我正在抓取一个网站来检查各种产品的库存状态 不幸的是 这需要实际单击产品页面上的 添加到购物车 并检查下一页的消息以确定是否有库存 即它需要解析两个响应 我跟着优秀的文档 http doc scrapy org en latest topi
  • jul-to-slf4j 仅适用于特定类别

    我正在 Websphere Application Server 上使用 Primefaces 开发 JSF 项目 由于 Primefaces 使用 java util logging 因此我使用 jul to slf4j Bridge 将
  • 具有默认值的嵌套字典

    有没有办法制作一个嵌套字典 这样我就可以说mydict x y z 1 where mydict x y z 以前不存在 默认为 0 递增后为 1 我研究了类似问题的答案 你可以说mydict x y z 1 using defaultdi
  • 链接和图标之间有空格,非常棒

    在链接 段落和图标之间添加空格的最佳方法是什么 a href upgrade selection i class fa fa reply i Change a 仅在文本前放置一个空格是行不通的 因为当您缩小 丑化项目时它会被改回来 我尝试了
  • 用最少数量的固定半径圆完全覆盖一个矩形

    我已经有这个问题好几年了 不久前 这是我镇上的一场信息学竞赛 我没能解决 我的老师也没能解决 我还没有遇到能够解决这个问题的人 我认识的人都不知道给出答案的正确方法 所以我决定将其发布在这里 泽问题 给定一个 X Y 的矩形 找到具有固定给