# Particle attractor

This topic is 5127 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I've never done a particle attractor before and would really like to implement one in my particle engine. I'm not really sure if I'm doing it right. Here's the main affect function of my basic attractor class: void nParticleAttractor::Affect(nIParticle* particle) { nVector2 dir = m_Position - particle->GetPosition(); nVector2 force = dir * (1.0f/(dir.Length()/2.0f)) * m_Power; particle->AddForce(force); } Is this corrent? Could some one give me an overview of how to create forcefields/attractors please. Here is my app Download Just uncomment the attractor actor in the Scene.xml file

##### Share on other sites
Quote:
 nVector2 force = dir * (1.0f/(dir.Length()/2.0f)) * m_Power;

could be written as
 nVector2 force = dir * Power(dir);

Where Power() is a function depending on the relative position of the particle.
E.g. if you have two masses attracting each other, newtons law is:

F= gamma*m1*m2/(r*r)

so your Power() function would look like this:
float Power(nVector2 dir){  float c = ...; // some constant, i.e. gamma*m1*m2  float l = dir.Length();  return c / (l*l);}

but you could use any other function you like.

Got the idea ?

##### Share on other sites
note that:

scale = 1.0f / (tiny_offset + dot_product (dir, dir));
particle->AddForce (dir * Scale);

is faster, no square root. but that may not be the function you want.

tiny_offset is to bypass 1/0 without if statements, of course.

1. 1
2. 2
3. 3
Rutin
15
4. 4
5. 5

• 10
• 9
• 9
• 11
• 11
• ### Forum Statistics

• Total Topics
633685
• Total Posts
3013317
×