
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(); }