blob(s)
function Blob(x, y, radius, numPointMasses)
{
this.x = x;
this.y = y;
this.sticks = new Array();
this.pointMasses = new Array();
this.joints = new Array();
this.middlePointMass;
this.radius = radius;
this.drawFaceStyle = 1;
this.drawEyeStyle = 1;
this.selected = false;
numPointMasses = 8;
var f = 0.1;
var low = 0.95, high = 1.05;
var t, i, p;
function clampIndex(index, maxIndex)
{
index += maxIndex;
return index % maxIndex;
}
for(i = 0, t = 0.0; i < numPointMasses; i++)
{
this.pointMasses[i] = new PointMass(Math.cos(t) * radius + x, Math.sin(t) * radius + y, 1.0);
t += 2.0 * Math.PI / numPointMasses;
}
this.middlePointMass = new PointMass(x, y, 1.0);
this.pointMasses[0].setMass(4.0);
this.pointMasses[1].setMass(4.0);
for(i = 0; i < numPointMasses; i++)
{
this.sticks[i] = new Stick(this.pointMasses[i], this.pointMasses[clampIndex(i + 1, numPointMasses)]);
}
for(i = 0, p = 0; i < numPointMasses; i++)
{
this.joints[p++] = new Joint(this.pointMasses[i], this.pointMasses[clampIndex(i + numPointMasses / 2 + 1, numPointMasses)], low, high);
this.joints[p++] = new Joint(this.pointMasses[i], this.middlePointMass, high * 0.9, low * 1.1); // 0.8, 1.2 works
}
this.addBlob = function(blob)
{
var index = this.joints.length;
var dist;
this.joints[index] = new Joint(this.middlePointMass, blob.getMiddlePointMass(), 0.0, 0.0);
dist = this.radius + blob.getRadius();
this.joints[index].setDist(dist * 0.95, 0.0);
}
this.getMiddlePointMass = function()
{
return this.middlePointMass;
}
this.getRadius = function()
{
return this.radius;
}
this.getXPos = function()
{
return this.middlePointMass.getXPos();
}
this.getYPos = function()
{
return this.middlePointMass.getYPos();
}