flash - 用最大的 "zoom"将固定大小的矩形包装在一个圆内

标签 flash algorithm math actionscript packing

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

最佳答案

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

测试函数应该是这样的:

测试函数(R, rectangle_scale)

  1. 沿直径尽可能多地拟合矩形
  2. 尽可能多地在直径上方与直径顶部的矩形相邻(例如 2*R/rectangle_scale*side)或类似的东西)
  3. 重复(放置在您刚刚放置的矩形上方。这样做直到没有更多的矩形可以放置
  4. 返回适合的矩形数

二分查找将是标准的:

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。

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

希望这对您有所帮助!

关于flash - 用最大的 "zoom"将固定大小的矩形包装在一个圆内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365007/

相关文章:

css - 使用 CSS 使禁用的 Flex Spark 按钮更具可读性

actionscript-3 - AS3 链接到网页

闪存反编译器

ios - iOS 和 Flash 播放器之间的音频兼容性

java - 对混合数据列表进行排序?

algorithm - 最小硬币找零问题 - 最小公倍数

mysql - 在线游戏登录设计

algorithm - SAT 求解器确定多元函数的特征?

java - 使用百分比时,找到一个随机整数创建另一个整数

java - 在算法中直接获取数学知识