如何在固定区域中生成非重叠圆?

时间:2009-02-06 21:02:08

标签: algorithm graphics

在有限的空间内生成已知数量的非重叠固定半径圆的最佳方法是什么?

6 个答案:

答案 0 :(得分:3)

如果您只想在尽可能小的区域内使用圈数,请使用hexagonal close packing

答案 1 :(得分:3)

使用最少剩余空间执行此操作的方法是将圆的中心放在六边形网格上,就像您制作金字塔金字塔时所获得的模式一样。

答案 2 :(得分:3)

请参阅维基百科上的Circle packing theorem

答案 3 :(得分:2)

您可以将屏幕拆分为网格,并在每个“方形”中绘制一个圆圈:)

答案 4 :(得分:1)

我认为您的问题没有明确规定。对世代的任何限制?

这是针对固定半径的非重叠圆的随机集合的拒绝算法:

  1. 维护所有圈子的列表
  2. 通过生成候选人
    1. 在允许的区域中生成随机中心
    2. 测试列表中的每个现有圆圈是否与候选人发生碰撞,如果发现任何碰撞,则拒绝。如果全部通过,请将此候选人添加到您的列表中。
  3. 转到#1,直到您对生成的数字感到满意为止
  4. 编辑:更仔细地阅读问题,指定半径......

答案 5 :(得分:0)

这取决于空间的形状以及您未指定的圆圈性质的其他限制。例如,要在高度为Y且长度为X的矩形中生成N个非重叠圆,让每个圆的直径为X / 10 * N或Y / 10 * N,取较小者,并使每个中心间隔开均匀地在划分矩形的水平线上,跨越其长度的一半。