stick(s)
function Stick(pointMassA, pointMassB)
{
function pointMassDist(pointMassA, pointMassB)
{
var aXbX, aYbY;
aXbX = pointMassA.getXPos() - pointMassB.getXPos();
aYbY = pointMassA.getYPos() - pointMassB.getYPos();
return Math.sqrt(aXbX * aXbX + aYbY * aYbY);
}
this.length = pointMassDist(pointMassA, pointMassB);
this.lengthSquared = this.length * this.length;
this.pointMassA = pointMassA;
this.pointMassB = pointMassB;
this.delta = new Vector(0.0, 0.0);
this.getPointMassA = function()
{
return this.pointMassA;
}
this.getPointMassB = function()
{
return this.pointMassB;
}
this.scale = function(scaleFactor)
{
this.length *= scaleFactor;
this.lengthSquared = this.length * this.length;
}
this.sc = function(env)
{
var dotProd, scaleFactor;
var pointMassAPos, pointMassBPos;
pointMassAPos = this.pointMassA.getPos();
pointMassBPos = this.pointMassB.getPos();
this.delta.set(pointMassBPos);
this.delta.sub(pointMassAPos);
dotProd = this.delta.dotProd(this.delta);
scaleFactor = this.lengthSquared / (dotProd + this.lengthSquared) - 0.5;
this.delta.scale(scaleFactor);
pointMassAPos.sub(this.delta);
pointMassBPos.add(this.delta);
}
this.setForce = function(force)
{
this.pointMassA.setForce(force);
this.pointMassB.setForce(force);
}
this.addForce = function(force)
{
this.pointMassA.addForce(force);
this.pointMassB.addForce(force);
}
this.move = function(dt)
{
this.pointMassA.move(dt);
this.pointMassB.move(dt);
}
this.draw = function(ctx, scaleFactor)
{
this.pointMassA.draw(ctx, scaleFactor);
this.pointMassB.draw(ctx, scaleFactor);
ctx.lineWidth = 3;
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.getYPos() * scaleFactor);
ctx.stroke();
}
}