Если количество/размер объектов достаточно мало по отношению к размеру плоскоси, то можно многократно случайно размещать объекты в плоскости до тех пор пока они не перестанут пересекаться. Либо поочередно укладывать объекты на плоскость в случайные позиции в которых они не пересекаются с предыдущими.
UPD: можно обойтись без деления и циклов 3 и 4 вложености, для этого для каждого значения радиуса реализовать не хитрую арифметическую функцию подсчета среднего с сложением и побитовым сдвигом, а потом эти функции заинлайнить чтобы избежать оверхед на вызов функций
при размере canvas 500 X 500 и радиусе 6, данный метод будет вызван 36000000, значит 36KK вызовов функций (+ обертка результата в объект) + 432KK операци умножения, против 36KK операций умножения при ручном дерганьи данных.