#

API Docs for: 0.6.1
Show: Inherited Protected Private Deprecated

# File: src/equations/RotationalMotorEquation.js

    module.exports = RotationalMotorEquation;

    var Vec3 = require('../math/Vec3');
    var Mat3 = require('../math/Mat3');
    var Equation = require('./Equation');

    /**
     * Rotational motor constraint. Tries to keep the relative angular velocity of the bodies to a given value.
     * @class RotationalMotorEquation
     * @constructor
     * @author schteppe
     * @param {Body} bodyA
     * @param {Body} bodyB
     * @param {Number} maxForce
     * @extends Equation
     */
    function RotationalMotorEquation(bodyA, bodyB, maxForce){
        maxForce = typeof(maxForce)!=='undefined' ? maxForce : 1e6;
        Equation.call(this,bodyA,bodyB,-maxForce,maxForce);

        /**
         * World oriented rotational axis
         * @property {Vec3} axisA
         */
        this.axisA = new Vec3();

        /**
         * World oriented rotational axis
         * @property {Vec3} axisB
         */
        this.axisB = new Vec3(); // World oriented rotational axis

        /**
         * Motor velocity
         * @property {Number} targetVelocity
         */
        this.targetVelocity = 0;
    }

    RotationalMotorEquation.prototype = new Equation();
    RotationalMotorEquation.prototype.constructor = RotationalMotorEquation;

    RotationalMotorEquation.prototype.computeB = function(h){
        var a = this.a,
            b = this.b,
            bi = this.bi,
            bj = this.bj,

            axisA = this.axisA,
            axisB = this.axisB,

            GA = this.jacobianElementA,
            GB = this.jacobianElementB;

        // g = 0
        // gdot = axisA * wi - axisB * wj
        // gdot = G * W = G * [vi wi vj wj]
        // =>
        // G = [0 axisA 0 -axisB]

        GA.rotational.copy(axisA);
        axisB.negate(GB.rotational);

        var GW = this.computeGW() - this.targetVelocity,
            GiMf = this.computeGiMf();

        var B = - GW * b - h * GiMf;

        return B;
    };