как эффективно обрабатывать различные функции распределения вероятностей?

У меня есть система частиц, которая, как обычно, создает новые частицы, обновляет их и уничтожает...

В модуле эмиттера есть цикл 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()

мы можем сократить количество различных дистрибутивов и использовать только два или три из них...

пожалуйста, обратите внимание, что мой пример очень простой, но в реальном коде у вас есть несколько конфигураций параметров частиц.

Я хотел бы получить несколько общих советов по этому вопросу.

0
задан fen 2 June 2012 в 15:05
поделиться