【发布时间】:2020-09-27 01:17:19
【问题描述】:
这是我的问题:
- 我需要在画布内显示一堆圆圈。
- 有任意数量的圆,每个圆都有一个预定义的半径。
- 圆圈的总面积总是小于画布的面积。
我想定位圆圈,使它们占据画布内的最大可用空间,而不会相互接触。我的目标是实现视觉上令人愉悦的效果,使圆圈在画布内均匀分布。我不知道这是否真的是“空间填充”,因为我的目标不是最小化元素之间的距离,而是最大化它。
这是我想要实现的一个示例:
我的第一个“蛮力”想法如下:
- 对于每个圆:计算其边界与其他圆的边界之间的最短距离;将所有这些距离相加,称为 X。
- 计算所有 X 的总和。
- 随机改变圆圈之间的距离。
- 按照预设的迭代次数重做 1-3,并取步骤 (2) 中获得的最大值。
但是,这似乎并不优雅;我确信有更好的方法来做到这一点。有没有现有的算法来实现这样的布局?我可以使用任何现有的库(JavaScript 或 Ruby)来实现这一点吗?
编辑
这是已接受答案的Javascript version,它使用拉斐尔绘制圆圈。
【问题讨论】:
-
louism,看看克里斯的回答!这些图像看起来很棒——我认为你应该接受那个。 @KrisVanBael,将代码发布到 GitHub 上怎么样?
标签: javascript ruby layout geometry