Добавление объектов в сцену с учетом вероятности

Если нужно добавить несколько разных объектов в сцену, и при этом, каждый объект должен появляться в сцене с большей или меньшей вероятностью, можно воспользоваться методом генерации случайных наборов “random.choice” из модуля “numpy”.

Для начала создадим список объектов, которые нужно добавить в сцену. Пусть это будут сферы, кубы и Сюзанны:

Также зададим список вероятностей, с которыми данные объекты должны появляться в сцене:

Список вероятностей должен содержать такое же количество элементов, как и список объектов. Число соответствует вероятности появления в сцене объекта, находящегося в списке объектов на том же месте.

В нашем случае для сфер вероятность появления равна 0.6 (чаще всего), для кубов – 0.3 (реже) и для Сюзанн – 0.1 (совсем редко).

Конвертируем список вероятностей в массив numpy (numpy.array). Дополнительно проведем нормализацию значений. Она нужна в случае, если сумма заданных нами вероятностей не равна 1 (например, если мы задали вероятности в процентном формате [60, 30, 10]).

Вызовем метод random.choice, чтобы сгенерировать набор из 6 объектов, которые мы потом добавим в сцену.

В первом параметре “a” мы указали исходный перечень объектов.

Параметр “size” мы задали равным 6. Это значит, что в результате мы хотим получить список из шести объектов.

Так как количество нужных нам на выходе объектов больше чем в исходном списке, параметр “replace” нужно задать равным True. Это значит, что мы допускаем повторения объектов в результирующем списке. Если установить его равным False, то в результирующем списке каждый объект из исходного списка будет присутствовать только один раз. Однако, в этом случае нужно следить, чтобы в исходном списке объектов было больше или равное заданному в параметре “size” количеству.

В параметре “p” мы указываем список с нормализованными вероятностями.

Если выполнить приведенный код несколько раз и вывести полученный список на печать,

то хорошо видно, что сферы в результате встречаются чаще всего, кубы – гораздо реже, а Сюзанны – совсем редко, что и требовалось получить.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии