我想将任意数量的矩形放入固定大小的父级中,以便它们是:
为了帮助您可视化问题,我想在窗口内分散图像,供用户选择。
谷歌搜索引导我做各种包装等算法,但没有真正满足我的要求。
有没有人有什么好主意?
答案 0 :(得分:2)
它不应该比:
复杂得多在任何情况下,您都希望尝试保持矩形的数量较小,因为比较的数量很快就会变得非常大。使用短路(例如“如果它们在屏幕的中间位置,那么请不要仔细查看”)可能有所帮助,但不是保证。
编辑:好的,所以要求#5。有可能推动两个矩形 - 直到它们 - 不再 - 碰撞 - 递归添加新矩形的方法将最终成为最简单的方法 - 只需在几千次迭代后切断循环,一切都会试图尽可能远离其他一切,留下最小的重叠。或者,让方法在一个单独的线程中运行,以便用户可以看到它们随着更多的添加而扩散(也可以阻止它看起来像是在思考时锁定),一旦没有矩形移动超过X单位,就停止迭代。答案 1 :(得分:1)
这个怎么样?考虑一下你必须放置的矩形,这些矩形是带状的,带电的粒子彼此排斥,并且也被容器的壁排斥。您可以从容器中(随机)分配它们(并给它们随机角度)开始,然后运行模拟,其中每个“粒子”响应于作用在其上的力而移动(角度将根据这些力的转动力矩而改变) )。在满足公差范围内的配置时停止。
您可以通过将每个矩形视为椭圆来简化计算,可以通过将每个椭圆视为经过缩放和旋转的圆来进一步简化计算。
答案 2 :(得分:0)
我不明白要求2.您是说矩形本身围绕矩形中心点旋转,或者矩形仅覆盖围绕所有矩形中心点的360度圆的一部分。
我不确定随机是否可行。
简单地将所需的矩形数量除以360度。这是在绘制每个矩形时偏移的度数。这应该包括要求3,4和5。