File: src/material/ContactMaterial.js
var Utils = require('../utils/Utils');
module.exports = ContactMaterial;
/**
* Defines what happens when two materials meet.
* @class ContactMaterial
* @constructor
* @param {Material} m1
* @param {Material} m2
* @param {object} [options]
* @param {Number} [options.friction=0.3]
* @param {Number} [options.restitution=0.3]
* @param {number} [options.contactEquationStiffness=1e7]
* @param {number} [options.contactEquationRelaxation=3]
* @param {number} [options.frictionEquationStiffness=1e7]
* @param {Number} [options.frictionEquationRelaxation=3]
*/
function ContactMaterial(m1, m2, options){
options = Utils.defaults(options, {
friction: 0.3,
restitution: 0.3,
contactEquationStiffness: 1e7,
contactEquationRelaxation: 3,
frictionEquationStiffness: 1e7,
frictionEquationRelaxation: 3
});
/**
* Identifier of this material
* @property {Number} id
*/
this.id = ContactMaterial.idCounter++;
/**
* Participating materials
* @property {Array} materials
* @todo Should be .materialA and .materialB instead
*/
this.materials = [m1, m2];
/**
* Friction coefficient
* @property {Number} friction
*/
this.friction = options.friction;
/**
* Restitution coefficient
* @property {Number} restitution
*/
this.restitution = options.restitution;
/**
* Stiffness of the produced contact equations
* @property {Number} contactEquationStiffness
*/
this.contactEquationStiffness = options.contactEquationStiffness;
/**
* Relaxation time of the produced contact equations
* @property {Number} contactEquationRelaxation
*/
this.contactEquationRelaxation = options.contactEquationRelaxation;
/**
* Stiffness of the produced friction equations
* @property {Number} frictionEquationStiffness
*/
this.frictionEquationStiffness = options.frictionEquationStiffness;
/**
* Relaxation time of the produced friction equations
* @property {Number} frictionEquationRelaxation
*/
this.frictionEquationRelaxation = options.frictionEquationRelaxation;
}
ContactMaterial.idCounter = 0;