code:
Stage.scaleMode = "noScale";
Stage.showMenu = false;
_global.sW = 600;
_global.sH = 400;
this.createEmptyMovieClip("pen", 0);
function getDistance(ob0, ob1) {
return Math.sqrt(Math.pow(ob0.x-ob1.x, 2)+Math.pow(ob0.y-ob1.y, 2));
}
function getMean(values) {
mean = 0;
for (i=0; i<values.length; i++) {
mean += values[i];
}
return mean/values.length;
}
function reset() {
delete _root.onEnterFrame;
drag = .9;
grav = .5;
pL = [];
pL[0] = {x:0, y:0, r:10};
pL[1] = {x:0, y:10};
pL[2] = {x:0, y:60};
pL[3] = {x:0, y:100};
pL[4] = {x:0, y:140};
pL[5] = {x:0, y:50};
pL[6] = {x:0, y:80};
for (i=0; i<pL.length; i++) {
p = pL[i];
if (p.r == undefined) {
p.r = 0;
}
p.ox = p.x;
p.oy = p.y;
}
sL = [];
sL[0] = {p0:pL[0], p1:pL[1], w0:.5, w1:.5, col:true};
sL[1] = {p0:pL[1], p1:pL[2], w0:.5, w1:.5, col:true};
sL[2] = {p0:pL[2], p1:pL[3], w0:.5, w1:.5, col:true};
sL[3] = {p0:pL[3], p1:pL[4], w0:.5, w1:.5, col:true};
sL[4] = {p0:pL[1], p1:pL[5], w0:.5, w1:.5, col:true};
sL[5] = {p0:pL[5], p1:pL[6], w0:.5, w1:.5, col:true};
for (i=0; i<sL.length; i++) {
s = sL[i];
s.rL = getDistance(s.p0, s.p1);
}
_root.onEnterFrame = function() {
if (Key.isDown(Key.SPACE)) {
reset();
}
movePoints();
Verlet();
collide();
drawIt();
};
}
function movePoints() {
if (Key.isDown(Key.UP)) {
pL[0].y -= 10;
}
if (Key.isDown(Key.DOWN)) {
pL[0].y += 10;
}
if (Key.isDown(Key.LEFT)) {
pL[0].x -= 10;
}
if (Key.isDown(Key.RIGHT)) {
pL[0].x += 10;
}
}
function Verlet() {
for (i=0; i<pL.length; i++) {
p = pL[i];
ox = p.ox;
oy = p.oy;
px = p.ox=p.x;
py = p.oy=p.y;
d = pl[i].drag;
p.x += drag*(px-ox);
p.y += drag*(py-oy)+grav;
}
for (i=0; i<sL.length; i++) {
s = sL[i];
p0 = s.p0;
p1 = s.p1;
dx = p0.x-p1.x;
dy = p0.y-p1.y;
d = getDistance(p0, p1);
d0 = d1=(d-s.rL)/d;
d0 *= s.w0;
d1 *= s.w1;
p0.x -= dx*d0;
p0.y -= dy*d0;
p1.x += dx*d1;
p1.y += dy*d1;
}
}
function collide() {
for (i=0; i<pL.length; i++) {
p = pL[i];
if (p.x<p.r) {
p.x = p.r;
}
if (p.x>sW-p.r) {
p.x = sW-p.r;
}
if (p.y<p.r) {
p.y = p.r;
}
if (p.y>sH-p.r) {
p.y = sH-p.r;
}
}
}
function drawIt() {
pen.clear();
pen.lineStyle(5, "0x0000FF");
for (i=0; i<sL.length; i++) {
s = sL[i];
p0 = s.p0;
p1 = s.p1;
pen.moveTo(p0.x, p0.y);
pen.lineTo(p1.x, p1.y);
}
pen.lineStyle(1, "0xFF0000");
pen.moveTo(0, 0);
pen.lineTo(sW, 0);
pen.lineTo(sW, sH);
pen.lineTo(0, sH);
pen.lineTo(0, 0);
}
reset();