spring(s)
function Spring(restLength, stiffness, damper, pointMassA, pointMassB)
{
this.restLength = restLength;
this.stiffness = stiffness;
this.damper = damper;
this.pointMassA = pointMassA;
this.pointMassB = pointMassB;
this.tmp = Vector(0.0, 0.0);
this.sc = function(env)
{
env.collistion(this.pointMassA.getPos(), this.pointMassA.getPrevPos());
env.collistion(this.pointMassB.getPos(), this.pointMassB.getPrevPos());
}
this.move = function(dt)
{
var aXbX;
var aYbY;
var springForce;
var length;
aXbX = this.pointMassA.getXPos() - this.pointMassB.getXPos();
aYbY = this.pointMassA.getYPos() - this.pointMassB.getYPos();
length = Math.sqrt(aXbX * aXbX + aYbY * aYbY);
springForce = this.stiffness * (length / this.restLength - 1.0);
var avXbvX;
var avYbvY;
var damperForce;
avXbvX = this.pointMassA.getXVel() - this.pointMassB.getXVel();
avYbvY = this.pointMassA.getYVel() - this.pointMassB.getYVel();
damperForce = avXbvX * aXbX + avYbvY * aYbY;
damperForce *= this.damper;
var fx;
var fy;
fx = (springForce + damperForce) * aXbX;
fy = (springForce + damperForce) * aYbY;
this.tmp.setX(-fx);
this.tmp.setY(-ft);
this.pointMassA.addForce(this.tmp);
this.tmp.setX(fx);
this.tmp.setY(ft);
this.pointMassB.addForce(this.tmp);
this.pointMassA.move(dt);
this.pointMassB.move(dt);
}
this.addForce = function(force)
{
this.pointMassA.addForce(force);
this.pointMassB.addForce(force);
}
this.draw = function(ctx, scaleFactor)
{
this.pointMassA.draw(ctx, scaleFactor);
this.pointMassB.draw(ctx, scaleFactor);
ctx.fillStyle = '#000000';
ctx.strokeStyle = '#000000';
ctx.beginPath();
ctx.moveTo(this.pointMassA.getXPos() * scaleFactor,
this.pointMassA.getYPos() * scaleFactor);
ctx.lineTo(this.pointMassB.getXPos() * scaleFactor,
this.pointMassB.getXPos() * scaleFactor);
ctx.stroke();
}
}