day3 (german!) libs
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import processing.opengl.*;
|
||||
|
||||
import mathematik.*;
|
||||
|
||||
import teilchen.Particle;
|
||||
import teilchen.Physics;
|
||||
import teilchen.constraint.Stick;
|
||||
import teilchen.force.Gravity;
|
||||
import teilchen.integration.Verlet;
|
||||
|
||||
Physics mPhysics;
|
||||
|
||||
Particle[] mParticles;
|
||||
|
||||
void setup() {
|
||||
size(640, 480, OPENGL);
|
||||
frameRate(60);
|
||||
smooth();
|
||||
|
||||
mPhysics = new Physics();
|
||||
/* increase the number of iterations for contraints in each step. this can greatly relaxes tensions in the system. */
|
||||
mPhysics.contraint_iterations_per_steps = 5;
|
||||
|
||||
/* add gravity for extra fun */
|
||||
mPhysics.add(new Gravity());
|
||||
|
||||
/* we chose verlet integration as it integrates much more nicely with sticks ( and constraints in general ) */
|
||||
Verlet myVerlet = new Verlet();
|
||||
myVerlet.damping(0.99f);
|
||||
mPhysics.setInegratorRef(myVerlet);
|
||||
|
||||
/* setup sticks to form a whip */
|
||||
mParticles = new Particle[16];
|
||||
float mSegmentLength = 20.0;
|
||||
/* create root */
|
||||
for (int x = 0; x < mParticles.length; x++) {
|
||||
mParticles[x] = mPhysics.makeParticle(x * mSegmentLength, 0, 0, 0.1f);
|
||||
if (x > 0) {
|
||||
Stick myStick = new Stick(mParticles[x - 1],
|
||||
mParticles[x],
|
||||
mSegmentLength);
|
||||
/* damp the stick to release tensions from the system */
|
||||
myStick.damping(0.99f);
|
||||
mPhysics.add(myStick);
|
||||
}
|
||||
}
|
||||
|
||||
/* fix root particle so it can stick to the mouse later */
|
||||
mParticles[0].fixed(true);
|
||||
}
|
||||
|
||||
void draw() {
|
||||
/* stick root particle to mouse */
|
||||
mParticles[0].position().set(mouseX, mouseY);
|
||||
|
||||
/* update */
|
||||
mPhysics.step(1.0 / frameRate);
|
||||
|
||||
/* draw sticks with descending stroke weight */
|
||||
background(255);
|
||||
stroke(0, 192);
|
||||
for (int x = 1; x < mParticles.length; x++) {
|
||||
Particle p1 = mParticles[x - 1];
|
||||
Particle p2 = mParticles[x];
|
||||
final float mStrokeWeight = 4.0 * (1.0 - (float)x / mParticles.length);
|
||||
strokeWeight(mStrokeWeight);
|
||||
line(p1.position().x, p1.position().y, p1.position().z,
|
||||
p2.position().x, p2.position().y, p2.position().z);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user