我需要一种算法将一组 N 个矩形放在半径为 R 的圆内,以便将它们放大到不超过圆边界的最大可能尺寸。我仍在努力,所以如果我找到答案,我会在此处发布...
最佳答案
如果我要这样做,我可能会使用一个函数通过二进制搜索来完成它,该函数测试问题对于给定的 N、R 和 rectangle_scale 是否可以解决。
测试函数应该是这样的:
测试函数(R, rectangle_scale)
- 沿直径尽可能多地拟合矩形
- 尽可能多地在直径上方与直径顶部的矩形相邻(例如 2*R/rectangle_scale*side)或类似的东西)
- 重复(放置在您刚刚放置的矩形上方。这样做直到没有更多的矩形可以放置
- 返回适合的矩形数
二分查找将是标准的:
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/