In this recipe, we will explain how you can apply Brownian motion to your particles. Particles are going to behave like snowflakes or leaves flying in the wind.
In this recipe we are going to use the code base from the Creating a particle system in 2D recipe.
We will add movement to particles calculated from the Perlin noise and sine function. Perform the following steps to do so:
#include "cinder/Perlin.h"
float mFrequency; Perlin mPerlin;
setup
method.mFrequency = 0.01f; mPerlin = Perlin();
int numParticle = 300; float radius = 1.f; float mass = Rand::randFloat(1.f, 5.f);
update
method, add the following code snippet:Vec2f oscilationVec; oscilationVec.x = sin(getElapsedSeconds()*0.6f)*0.2f; oscilationVec.y = sin(getElapsedSeconds()*0.2f)*0.1f; std::vector<Particle*>::iterator it; for(it = mParticleSystem.particles.begin(); it != mParticleSystem.particles.end(); ++it ) { Vec2f windForce = mPerlin.dfBm( (*it)->position * mFrequency ); (*it)->forces += windForce * 0.1f; (*it)->forces += oscilationVec; }
The main movement calculations and forces are applied in step 5. As you can see we are using the Perlin noise algorithm implemented as a part of Cinder. It provides a method to retrieve Brownian motion vectors for each particle. We also add oscilationVec
that makes particles swing from left-to-right and backwards, adding more realistic behavior.
3.147.68.159