Случайно размещать объекты, используя карту альфа

Я хочу размещать объекты случайным образом, используя альфа-карту (только черный цвет, а не в оттенках серого). Черные области на карте используются, чтобы определить, где мы МОЖЕМ разместить объект.

Почему я хочу это сделать? Например, у нас есть местность с рекой. Мы хотим случайным образом разместить сундук в этой местности, и дело в том, что мы хотим, чтобы наш сундук НЕ БЫЛ В РЕКЕ. У нас есть специальное место для размещения этого сундука, и это место может иметь очень сложную структуру.

Простая карта с озером и рекой:

ссылка на простую карту с изображением озера и реки

Черно-белая карта места размещения объектов:

ссылка на черно-белую карту места размещения объектов image

Конечно, мы можем просто взять случайные точки с помощью Random.Range() и проверить каждую точку, сравнив ее со значениями пикселей: "Точка находится в черной области?" НО, если бы у нас была очень маленькая (<10% от общей площади) и сложная "доступная" область (например, острова в болоте), тогда было бы очень большое количество "мусорных" точек. Поэтому это очень неэффективный метод.

Существует ли быстрая и эффективная техника для получения желаемого количества "доступных" очков?

1 ответ

Теоретически вы могли бы сегментировать альфа-карту по цвету, чтобы получить геометрическое многоугольное представление областей, затем вы могли бы сгенерировать точку алгоритмически внутри набора черно-белых полигонов. Но если вы хотите обменять память на скорость, есть гораздо более простое решение: просто представьте альфа-карту в виде двух массивов (черно-белых) координат пикселей и затем случайным образом выберите точку из необходимого массива.

Другие вопросы по тегам