Вот моя проблема:заполнения пространства с кругами неравного размера
- У меня есть куча кругов, что мне нужно, чтобы отобразить внутри холста.
- Существует произвольное количество кругов, каждый из которых имеет предопределенный радиус.
- Суммарная площадь кругов всегда меньше площади холста.
Я хочу расположить круги так, чтобы они занимали максимальное пространство, доступное внутри холста, не касаясь друг друга. Моя цель - добиться визуально приятного эффекта, когда круги будут хорошо распределены внутри холста. Я не знаю, действительно ли это «заполнение пространства», поскольку моя цель - не свести к минимуму расстояние между элементами, а не до maximize it.
Вот пример того, что я пытаюсь достичь:
Моя первая идея «грубая сила» была следующей:
- Для каждого круга: вычислить кратчайшее расстояние между его границей и границю другого круга; суммируйте все эти расстояния, назовите это X.
- Рассчитайте сумму всех X.
- Случайное изменение расстояний между кругами.
- Повторите 1-3 для заданного количества итераций и возьмите максимальное значение, полученное на этапе (2).
Однако это не выглядит элегантным; Я уверен, что есть лучший способ сделать это. Есть ли какой-либо существующий алгоритм для достижения такого макета? Есть ли какая-нибудь существующая библиотека, которую я мог бы использовать (JavaScript или Ruby) для достижения этой цели?
Редактировать
Вот Javascript version принятого ответа, который использует Рафаэль рисовать круги.
Не круги, но http://www.openprocessing.org/sketch/1811 – biziclop
louism, ознакомьтесь с ответом Криса! Изображения выглядят потрясающе - я думаю, вы должны принять это. @KrisVanBael, как насчет размещения кода на GitHub? –