我需要一种算法在一个半径为R的圆内放置一组N个矩形,这样它们就可以放大到不超过圆的边界的最大可能尺寸。我还在努力,所以如果我找到答案,我会在这里发布......
答案 0 :(得分:2)
如果我这样做,我可能会通过二进制搜索来完成它,使用函数测试问题是否可以解决给定的N,R和rectangle_scale。
测试功能应该类似于:
testfunction(R,rectangle_scale)
二进制搜索将是标准的:
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。
但是,如果你需要精确度,我只会使用面积近似来以智能方式设置初始下限/上限。
希望这有帮助!