@GreatRash

Как раскидать объекты по определенному объему без пересечения?

Собственно сабж: есть некий объём XYZ, и N объектов, которые должны уместиться в этом объёме. Как их раскидать рандомно так, чтобы они гарантированно не пересекались? Я придумал решение в лоб:


1) генерим рандомные координаты

2) помечаем, что эти координаты заняты

3) на следующей итерации смотрим не заняты ли координаты

4) если заняты, то повторяем всё заново


Это решение хреновое, т.к. где-то после 50 объектов комп начинает ощутимо задумываться. Можно ли как-то быстрее это сделать?
  • Вопрос задан
  • 9964 просмотра
Решения вопроса 1
demolishka
@demolishka
Если объекты единичного размера, то можно провести биекцию между точками в параллелепипеде объема XYZ и натуральными числами 1..XYZ, сгенерировать случайную перестановку и расставить объекты в позициях соответствующих первым N элементам перестановки. Сложность O(XYZ) и равномерное распределение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@GreatRash Автор вопроса

Объекты не единичного размера, но пространство разбито на одинаковые "клетки", так что решение подойдёт. Спасибо.

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы