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