Для разных фигур будут соверщенно разные алгоритмы.
Пару дней назад тоже решал эту задачу.
общий алгоритм такой:
1)создаем двухмерный массив с нулями
2)выбираем произвольную точку — основу круга. Выбираем радиус.
3)выбираем формулу какой либо фигуры (в моем случае круг)
4)проходим по всем элементам массива, проверяя принадлежность текущей точки к фигуре. Если точка принадлежит фигуре — ставим в данное поле массива единичку с случайным шансом.
5)увеличиваем радиус
6)повторяем 1-5 пару раз.
думаю выходит не совсем удачно в плане производительности, но работает.
подробную реализацию (для круга) скину в лс по запросу.
На выходе получается вот что: (очень зависит от коэффициентов, за пару минут можно подобрать нужную плотность)
Над чем работаете, если не секрет?