Организация кругов в визуализации данных - PullRequest
2 голосов
/ 19 августа 2011

Для визуализации данных мне нужно расположить круги разного размера в компактную область - прямоугольник или круг.(См. это и это пример.)

Теоретически это двумерно-нерегулярная проблема режущего материала нохотел бы избежать этого пути.Вы можете найти подобные визуализации во всем Интернете, и я сомневаюсь, что они используют любую строгую математику.

Все, что мне нужно, это чтобы круги выглядели упорядоченно (с примерно одинаковым расстоянием между ними).Должен быть более простой способ, чем резать математику.С некоторым преувеличением я могу даже представить, как движок 2D-физики мог использовать гравитацию, чтобы круги падали в контейнер желаемой формы.

Я буду благодарен за любой совет.

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

Проблема, которую вы пытаетесь решить, называется «упаковкой кругов». Поиск оптимальной плотности упаковки в различных формах действительно требует строгой математики. Однако мне удалось найти несколько относительно простых примеров алгоритмов циклической упаковки с открытым исходным кодом.

http://wonderfl.net/c/fNNF

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

2 голосов
/ 28 августа 2012

Оформить заказ на d3.js;см http://mbostock.github.com/d3/ex/pack.html.

0 голосов
/ 19 августа 2011

Если вы ищете не лучшее решение, а просто приличное решение, должен работать итеративный / физический подход: поместите все круги и приложите силу толкания к каждой паре кругов, пока они не пересекаются,твой цикл заканчивается.(У вас не будет способа определить, подходят ли круги в вашей области, поэтому убедитесь, что процедура заканчивается)

Если вы хотите, чтобы круги соединились, то примените силу притяжения к любой паре окружностей,не перекрываются.

...