day3 (german!) libs
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import processing.opengl.*;
|
||||
|
||||
import mathematik.*;
|
||||
|
||||
import teilchen.Physics;
|
||||
import teilchen.force.Gravity;
|
||||
import teilchen.force.ViscousDrag;
|
||||
import teilchen.util.DrawLib;
|
||||
import teilchen.Particle;
|
||||
import teilchen.constraint.Box;
|
||||
import teilchen.integration.RungeKutta;
|
||||
import teilchen.util.StableSpringQuad;
|
||||
|
||||
Physics mPhysics;
|
||||
|
||||
Particle mRoot;
|
||||
|
||||
void setup() {
|
||||
size(640, 480, OPENGL);
|
||||
smooth();
|
||||
frameRate(60);
|
||||
|
||||
mPhysics = new Physics();
|
||||
/* we use 'runge kutta' as it is more stable for this application */
|
||||
mPhysics.setInegratorRef(new RungeKutta());
|
||||
|
||||
Gravity myGravity = new Gravity();
|
||||
myGravity.force().y = 98.1f;
|
||||
mPhysics.add(myGravity);
|
||||
|
||||
/* add drag to smooth the spring interaction */
|
||||
mPhysics.add(new ViscousDrag(0.2f));
|
||||
|
||||
/* add a container */
|
||||
Box myBox = new Box();
|
||||
myBox.min().set(0, 0, 0);
|
||||
myBox.max().set(width, height, 0);
|
||||
mPhysics.add(myBox);
|
||||
|
||||
/* create root */
|
||||
Particle a = mPhysics.makeParticle(0, 0);
|
||||
Particle b = mPhysics.makeParticle(100, 0);
|
||||
Particle c = mPhysics.makeParticle(100, 100);
|
||||
Particle d = mPhysics.makeParticle(0, 100);
|
||||
|
||||
new StableSpringQuad(mPhysics, d, c, mPhysics.makeParticle(100, 200), mPhysics.makeParticle(0, 200));
|
||||
|
||||
/* create stable quad from springs */
|
||||
/* first the edge-springs ... */
|
||||
final float mySpringConstant = 100;
|
||||
final float mySpringDamping = 5;
|
||||
mPhysics.makeSpring(a, b, mySpringConstant, mySpringDamping);
|
||||
mPhysics.makeSpring(b, c, mySpringConstant, mySpringDamping);
|
||||
mPhysics.makeSpring(c, d, mySpringConstant, mySpringDamping);
|
||||
mPhysics.makeSpring(d, a, mySpringConstant, mySpringDamping).restlength();
|
||||
/* ... then the diagonal-springs */
|
||||
mPhysics.makeSpring(a, c, mySpringConstant, mySpringDamping);
|
||||
mPhysics.makeSpring(b, d, mySpringConstant, mySpringDamping).restlength();
|
||||
|
||||
/* define 'a' as root particle for mouse interaction */
|
||||
mRoot = a;
|
||||
mRoot.fixed(true);
|
||||
}
|
||||
|
||||
void draw() {
|
||||
|
||||
/* handle particles */
|
||||
if (mousePressed) {
|
||||
mRoot.fixed(true);
|
||||
mRoot.position().set(mouseX, mouseY);
|
||||
}
|
||||
else {
|
||||
mRoot.fixed(false);
|
||||
}
|
||||
|
||||
mPhysics.step(1f / frameRate);
|
||||
|
||||
/* draw */
|
||||
background(255);
|
||||
DrawLib.drawSprings(g, mPhysics, color(255, 0, 127, 64));
|
||||
DrawLib.drawParticles(g, mPhysics, 12, color(164), color(245));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user