【发布时间】:2013-09-12 14:03:48
【问题描述】:
我正在使用 Javascript 构建一个配置工具,它以不同的方式计算电缆中继器的测量值。基本上,您可以输入电缆数量和电缆直径。现在我想将这些电缆可视化为具有给定直径的圆圈,并自动将它们打包在一起以尽可能少地占用空间。这里有两个例子:
7 根电缆打包在一起:
48 根电缆:
如您所见,我已经尝试通过使用物理引擎 (physics.js) 来实现这一点,并让重力自动以最佳方式排列元素。这在某种程度上适用于少量元素,但对于大量元素(> 20)需要相当长的时间才能完成,并且并不总是产生最佳结果。除此之外,我认为这种方式有点过头了。
有没有一种简洁的方法来计算 x 给定直径为 d 的圆的位置?甚至可能有一个框架或类似的框架来处理这些任务?我很好奇你的想法,在此先感谢。哦,顺便说一句,这不是家庭作业——我 35 岁以上 :-D
【问题讨论】:
-
只是给您一个起点:当您查看围绕另一个圆的圆时,当所有圆的直径相同时,您可能会注意到外圆的中心构成了一个漂亮的正六边形。事实上,六边形网格是填充圆圈的最佳方式。也许你可以从这里算出(或谷歌)数学:)
-
@pawel:+1 我必须用谷歌搜索它! :) 显然一些数学家和物理学家也喜欢这个查询:en.wikipedia.org/wiki/Circle_packing_in_a_circle
-
小世界!!我早在 19 年前就从斯泰森大学毕业了!
-
嗯,可能仍然是家庭作业.. :-P 但我相信这对 SO 来说是题外话,因为它更像是一个数学问题而不是代码问题。为什么不检查math.stackexchange.com 或physics.stackexchange.com(但是,线条模糊)。
-
@Robert Gravity 可能不会产生最佳结果,但我对这种方法印象深刻。
标签: javascript math optimization geometry