topical media & game development

talk show tell print

mobile-query-three-plugins-cannonjs-vendor-cannon.js-src-constraints-DistanceConstraint.js / js



  
@class CANNON.DistanceConstraint @brief Distance constraint class
author: schteppe
parameter: CANNON.Body bodyA
parameter: CANNON.Body bodyB Could optionally be a CANNON.Vec3 to constrain a body to a static point in space
parameter: float distance

  
   CANNON.DistanceConstraint = function(bodyA,bodyB,distance){
      CANNON.Constraint.call(this);
      this.body_i = bodyA;
      this.body_j = bodyB;
      this.distance = Number(distance);
      var eq = new CANNON.Equation(bodyA, bodyB instanceof CANNON.Vec3 ? null : bodyB);
      this.equations.push(eq);
  };
  
  CANNON.DistanceConstraint.prototype = new CANNON.Constraint();
  CANNON.DistanceConstraint.prototype.constructor = CANNON.DistanceConstraint;
  
  CANNON.DistanceConstraint.prototype.update = function(){
      var eq = this.equations[0], bi = this.body_i, bj = this.body_j;
      var pair = typeof(bj.mass)=="number";
  
      // Jacobian is the distance unit vector
      if(pair)
          bj.position.vsub(bi.position, eq.G1);
      else
          bi.position.vsub(bj,eq.G1);
      eq.G1.normalize();
      if(eq.G1.isZero()) eq.G1.set(1,0,0);
      eq.G1.negate(eq.G3);
    
      // Mass properties
      eq.setDefaultMassProps();
      eq.setDefaultForce();
  
      // Constraint violation
      eq.g1.set(  (pair ? bj.position.x : bj.x) - bi.position.x - eq.G1.x*this.distance,
                  (pair ? bj.position.y : bj.y) - bi.position.y - eq.G1.y*this.distance,
                  (pair ? bj.position.z : bj.z) - bi.position.z - eq.G1.z*this.distance);
      eq.g1.negate(eq.g1);
      eq.g1.negate(eq.g3);
  };
  
  CANNON.DistanceConstraint.prototype.setMaxForce = function(f){
      this.equations[0].lambdamax = Math.abs(f);
      this.equations[0].lambdamin = -this.equations[0].lambdamax;
  };


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.