在数据可视化中排列圆圈

时间:2011-08-19 11:52:25

标签: visualization data-visualization

对于我的数据可视化,我需要将各种大小的圆安排到一个紧凑区域 - 矩形或圆形。 (请参阅thisthis示例。)

理论上它是一个二维不规则的 - cutting-stock-problem,但我想避免这样做。你可以在网上找到类似的可视化,我怀疑他们使用任何严格的数学。

我所需要的只是圆圈看似以某种有序的方式排列(它们之间的距离大致相同)。必须有一种比削减股票数学更简单的方法。稍微夸张一点,我甚至可以想象2D物理引擎如何利用引力使圆圈落入一个所需形状的容器中。

我会感谢任何建议。

3 个答案:

答案 0 :(得分:2)

您尝试解决的问题称为“圆形包装”。找到各种形状的最佳包装密度确实需要严格的数学计算。但是我能够找到一些相对简单的循环打包算法的开源示例。

http://wonderfl.net/c/fNNF

http://www.codeproject.com/Articles/42067/2D-Circle-Packing-algorithm-ported-to-C

答案 1 :(得分:2)

答案 2 :(得分:0)

如果您不是在寻找最佳解决方案,而只是寻求任何合适的解决方案,那么迭代/物理方法应该可行:放置所有圆圈,并对每对圆圈施加推力,直到它们不再重叠,或者你的循环耗尽。 (您将无法确定圆圈是否适合您的区域,因此请确保例程终止)

如果您希望圆圈粘在一起,则将吸引力应用于任何不重叠的圆圈。