Все элементарно.
Цикл в цикле.
Внешний цикл генерируете произвольную точку на плоскости (ну, например, генерируя случайное число в диапазоне размеров вашей плоскости по ширине и высоте)
Пробуете поместить центр очередного объекта в эту точку.
Получилось - отлично, продолжаем внешний цикли.
Не получилось (из-за того, что либо вышли за пределы плоскости, либо перекрылись с ранее размещенной фигурой) - тут два варианта вам на выбор. Либо сдвиг текущего объекта (и снова проверка возможности), либо возвращаемся к пункту случайной генерации позиции.
И так, пока не переберете все объекты.
Не удалось разместить все объекты - возвращаетесь на несколько объектов назад (или на все) и повторяете основной процесс.
Это самый тривиальный алгоритм. Разберетесь с ним - потом можно будет переходить к всякого рода оптимизациям - начиная с того, что бы объекты для размещения брать от самого большого к самому малому.