File: src/equations/FrictionEquation.js
- module.exports = FrictionEquation;
-
- var Equation = require('./Equation');
- var Vec3 = require('../math/Vec3');
- var Mat3 = require('../math/Mat3');
-
- /**
- * Constrains the slipping in a contact along a tangent
- * @class FrictionEquation
- * @constructor
- * @author schteppe
- * @param {Body} bodyA
- * @param {Body} bodyB
- * @param {Number} slipForce should be +-F_friction = +-mu * F_normal = +-mu * m * g
- * @extends Equation
- */
- function FrictionEquation(bodyA, bodyB, slipForce){
- Equation.call(this,bodyA, bodyB, -slipForce, slipForce);
- this.ri = new Vec3();
- this.rj = new Vec3();
- this.t = new Vec3(); // tangent
- }
-
- FrictionEquation.prototype = new Equation();
- FrictionEquation.prototype.constructor = FrictionEquation;
-
- var FrictionEquation_computeB_temp1 = new Vec3();
- var FrictionEquation_computeB_temp2 = new Vec3();
- FrictionEquation.prototype.computeB = function(h){
- var a = this.a,
- b = this.b,
- bi = this.bi,
- bj = this.bj,
- ri = this.ri,
- rj = this.rj,
- rixt = FrictionEquation_computeB_temp1,
- rjxt = FrictionEquation_computeB_temp2,
- t = this.t;
-
- // Caluclate cross products
- ri.cross(t,rixt);
- rj.cross(t,rjxt);
-
- // G = [-t -rixt t rjxt]
- // And remember, this is a pure velocity constraint, g is always zero!
- var GA = this.jacobianElementA,
- GB = this.jacobianElementB;
- t.negate(GA.spatial);
- rixt.negate(GA.rotational);
- GB.spatial.copy(t);
- GB.rotational.copy(rjxt);
-
- var GW = this.computeGW();
- var GiMf = this.computeGiMf();
-
- var B = - GW * b - h * GiMf;
-
- return B;
- };
-
-