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