在一个圆圈内包装固定尺寸的矩形,最大的“缩放”

时间:2011-09-09 16:59:19

标签: flash algorithm math actionscript packing

我需要一种算法在一个半径为R的圆内放置一组N个矩形,这样它们就可以放大到不超过圆的边界的最大可能尺寸。我还在努力,所以如果我找到答案,我会在这里发布......

1 个答案:

答案 0 :(得分:2)

如果我这样做,我可能会通过二进制搜索来完成它,使用函数测试问题是否可以解决给定的N,R和rectangle_scale。

测试功能应该类似于:

testfunction(R,rectangle_scale)

  1. 沿直径适合尽可能多的矩形
  2. 尽可能多地安装在直径顶部的矩形附近的直径上(例如2 * R / rectangle_scale *侧)或类似的东西)
  3. 重复(放置在刚放置的矩形上方。这样做直到不再适合矩形
  4. 返回适合
  5. 的矩形数

    二进制搜索将是标准的:

    while(upperbound-lowerbound > limit) {
       new_bound = (upperbound+lowerbound) / 2;
       num_fit = testfunction(N, R, new_bound);
       if(num_fit > N) {
          upperbound = new_bound;
       } else {
          lowerbound = new_bound;
       }
    }
    

    理想情况下,您当然希望以数学方式进行此操作。如果近似值适合您,您可以通过区域进行。近似将是(rectangle_area * scale * N = pi * R ^ 2)=> scale = scale = pi * R ^ 2 / N / rectangle_area。

    但是,如果你需要精确度,我只会使用面积近似来以智能方式设置初始下限/上限。

    希望这有帮助!