70 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

2015-03-04 09:41:41 +01:00
import processing.opengl.*;
import mathematik.*;
import teilchen.Particle;
import teilchen.Physics;
import teilchen.force.Spring;
import teilchen.util.Overlap;
/**
* this sketch is exactly like Lesson06_Springs, except that it also shows how to remove overlaps.
*/
Physics mPhysics;
Particle mRoot;
static final float PARTICLE_RADIUS = 6;
void setup() {
size(640, 480, OPENGL);
smooth();
frameRate(30);
mPhysics = new Physics();
mRoot = mPhysics.makeParticle(width / 2, height / 2, 0.0);
mRoot.mass(30);
}
void draw() {
if (mousePressed) {
Particle mParticle = mPhysics.makeParticle(mouseX, mouseY, 0);
Spring mSpring = mPhysics.makeSpring(mRoot, mParticle);
float mRestlength = mSpring.restlength();
mSpring.restlength(mRestlength * 1.5f);
/* we define a radius for the particle so the particle has dimensions */
mParticle.radius(PARTICLE_RADIUS);
}
/* move overlapping particles away from each other */
Overlap.resolveOverlap(mPhysics.particles());
/* update the particle system */
final float mDeltaTime = 1.0 / frameRate;
mPhysics.step(mDeltaTime);
/* draw particles and connecting line */
background(255);
/* draw springs */
noFill();
stroke(255, 0, 127, 64);
for (int i = 0; i < mPhysics.forces().size(); i++) {
if (mPhysics.forces().get(i) instanceof Spring) {
Spring mSSpring = (Spring)mPhysics.forces().get(i);
line(mSSpring.a().position().x, mSSpring.a().position().y,
mSSpring.b().position().x, mSSpring.b().position().y);
}
}
/* draw particles */
fill(245);
stroke(164);
for (int i = 0; i < mPhysics.particles().size(); i++) {
ellipse(mPhysics.particles().get(i).position().x,
mPhysics.particles().get(i).position().y,
PARTICLE_RADIUS * 2, PARTICLE_RADIUS * 2);
}
}