對於我的數據可視化,我需要將各種尺寸的圓圈排列成緊湊的區域 - 矩形或圓形。 (見this和this的例子。)在數據可視化中安排圓圈
理論上它是一個二維不規則的,但我想避免這種方式。你可以在網上找到類似的可視化,我懷疑他們使用任何嚴格的數學。
我所需要的只是圓圈顯得有序排列(它們之間的距離大致相同)。必須比削減庫存數學更容易。誇張地說,我甚至可以想象2D物理引擎如何利用重力使圓圈落入所需形狀的容器中。
我會感謝您的任何建議。
對於我的數據可視化,我需要將各種尺寸的圓圈排列成緊湊的區域 - 矩形或圓形。 (見this和this的例子。)在數據可視化中安排圓圈
理論上它是一個二維不規則的,但我想避免這種方式。你可以在網上找到類似的可視化,我懷疑他們使用任何嚴格的數學。
我所需要的只是圓圈顯得有序排列(它們之間的距離大致相同)。必須比削減庫存數學更容易。誇張地說,我甚至可以想象2D物理引擎如何利用重力使圓圈落入所需形狀的容器中。
我會感謝您的任何建議。
你試圖解決的問題叫做「圓圈包裝」。尋找各種形狀的最佳包裝密度確實需要嚴格的數學。但是我能夠找到一些相對簡單的循環打包算法的開源示例。
http://www.codeproject.com/Articles/42067/2D-Circle-Packing-algorithm-ported-to-C
如果你不是最好的解決方案,但只是任何體面的解決方案,迭代/物理方法應該工作:放置所有的圓圈,並對每對圓圈施加推力,直到它們不再重疊,或者你的循環用完了。 (您將無法確定圓圈是否適合您所在的區域,因此請確保例程終止)
如果您希望圓圈粘在一起,請將吸引力應用於任何不符合圓圈的圓圈交疊。
謝謝,但這種方法的主要問題是,你不會將它們適合給定的形狀。喲不知道方形(矩形)或圓形會有多大。將每個新圓圈添加到計算後,您必須更改形狀。我需要實時生成可視化,這可能是一個矯枉過正的問題。 –
這正是我需要的!我讀到的關於包裝的一切都是大小相同的圈子,導致我陷入了包裝問題和庫存問題。謝謝! –