我有一个粒子系统,通常会创建新粒子,更新它们并破坏......
在发射器模块中有用于重置粒子的 for 循环:
foreach p in particles
p.position = rand()
p.velocity = rand()
通常在使用 C 的 rand() 函数时,我们会得到均匀分布,但是当我想使用其他分布(例如高斯分布)时怎么办?
如何更改该代码以使其能够处理几种(或至少两种)不同的方式来生成新粒子的参数?
当然,您可以创建一些对象:例如 RandomGenerator,并使用一些虚函数调用并处理这些不同的行为。但是这段代码应该很快(更新数千个粒子时),所以我认为使用虚函数并不好。
或者也许我不应该关心并简单地写:
foreach p in particles
p.position = useGaussian ? gausRand() : UniRand()
p.velocity = useGaussian ? gausRand() : UniRand()
我们可以缩小不同分布的数量,只使用其中的两个或三个......
请注意,我的示例非常简单,但在实际代码中,您有几个粒子参数配置。
我想就该主题获得一些一般性建议。