你问的问题非常难。从这个角度来看,(更)简单的情况是,你用不重叠的圆盘填充有界多边形的内部已经很难了,而圆盘是最简单的“包装形状”(任何其他形状你必须考虑方向以及大小和中心位置)。
实际上,我认为确定任意整数 N 和任意有界多边形区域(在欧几里得平面中)是计算几何中的一个开放问题,什么是“最佳”(在覆盖多边形内部的最大百分比的意义上) ) N 个内接非重叠圆盘的包装,您可以自由选择每个圆盘的半径和中心位置。我确信“最佳”答案以某些特殊的多边形形状(如矩形、圆形和三角形)而闻名,但对于任意形状,您最好的“启发式”可能是:
- 从 N 开始您的形状计数器。
- 添加最大的“包装形状”,您可以完全适合多边形边界,而不会重叠任何其他包装形状。
- 减少你的形状计数器。
- 如果您的形状计数器 > 0,请转到步骤 2。
我说“可能”是因为“最大优先”并不总是将物品装入密闭空间的最佳方式。您可以通过阅读有关垃圾箱包装问题和背包问题的信息来深入了解这种疯狂的特殊风味。
编辑:第 2 步本身很难。一个合理的策略是选择多边形内部的任意点作为中心并“膨胀”圆盘,直到它接触边界或另一个圆盘(或两者),然后在继续膨胀的同时“滑动”圆盘它使其保持在边界内而不与任何其他磁盘重叠,直到它被“困住”——至少有 2 个与边界和/或其他磁盘接触的点。但要正式化这种“滑动过程”并不容易。即使滑动过程正确,这种策略也不能保证你会找到最大的“可写圆盘”——你的“局部最大”圆盘可能会被困在内部的“叶”中,该“叶”由一个狭窄的“脖子”