将粒子排列成矩形

时间:2014-05-29 15:34:13

标签: c++ algorithm

我有一个粒子模拟程序,我目前正致力于生成矩形的随机粒子位置。这现在适用,但它不是最好的解决方案,通常是粒子重叠,矩形中有小孔。我如何初始化矩形形状的粒子?

我目前的循环:

for(auto i=0; i<MAXPARTICLES; i++){
    int particleIndex = FindUnusedParticle();           //grab the index to give a particle life
    ParticlesContainer[particleIndex].life = 100.0f;    //Long particle life

    //generate random positions for particles in the shape of a box with random patterns
    ParticlesContainer[particleIndex].pos = glm::vec3((rand()%50)/5.0,(rand()%50)/5.0,-50.0);

    // Very bad way to generate a random color
    ParticlesContainer[particleIndex].r = 255;
    ParticlesContainer[particleIndex].g = 0;
    ParticlesContainer[particleIndex].b = 0;
    ParticlesContainer[particleIndex].a = 255;

    ParticlesContainer[particleIndex].size = .2f;

}

1 个答案:

答案 0 :(得分:1)

这比单独使用两个维度的均匀分布更复杂。如果你的“均匀度”是两个最接近的粒子之间的距离,那么有两种方法可以达到:等边三角形和正方形(如果计算六边形,则为三个)。唯一随机的东西就是一颗种子的位置以及将要进入的“方向”。

参考图片:

enter image description here

但是,这会给你一个非常规则的网格状外观。您可以尝试对以这种方式分发的粒子应用随机的微小变化,并看看它是如何工作的。