У меня есть система частиц, которая, как обычно, создает новые частицы, обновляет их и уничтожает...
В модуле эмиттера есть цикл for, который сбрасывает частицы:
foreach p in particles
p.position = rand()
p.velocity = rand()
обычно при использовании функции rand() C мы получаем равномерное распределение, но что когда я хотел бы использовать какое-то другое распределение (например, по Гауссу)?
как изменить этот код, чтобы он обрабатывал несколько (или, по крайней мере, два) разных способа генерации новых параметров частиц?
Конечно, вы можете создать какой-нибудь объект: например, RandomGenerator, и использовать некоторые вызовы виртуальных функций и обрабатывать эти различные варианты поведения. Но этот кусок кода должен быть очень быстрым (при обновлении тысяч частиц), поэтому использование виртуальных функций, я думаю, не очень хорошо.
или, может быть, мне все равно и просто написать:
foreach p in particles
p.position = useGaussian ? gausRand() : UniRand()
p.velocity = useGaussian ? gausRand() : UniRand()
мы можем сократить количество различных дистрибутивов и использовать только два или три из них...
пожалуйста, обратите внимание, что мой пример очень простой, но в реальном коде у вас есть несколько конфигураций параметров частиц.
Я хотел бы получить несколько общих советов по этому вопросу.