code: function(v) {
  
        // [0, v'] = Q * [0, v] * Q'
  
        // Q
        var w1 = this['w'];
        var x1 = this['x'];
        var y1 = this['y'];
        var z1 = this['z'];
  
        // [0, v]
        var w2 = 0;
        var x2 = v[0];
        var y2 = v[1];
        var z2 = v[2];
  
        // Q * [0, v]
        var w3 = /*w1 * w2*/ -x1 * x2 - y1 * y2 - z1 * z2;
        var x3 = w1 * x2 + /*x1 * w2 +*/ y1 * z2 - z1 * y2;
        var y3 = w1 * y2 + /*y1 * w2 +*/ z1 * x2 - x1 * z2;
        var z3 = w1 * z2 + /*z1 * w2 +*/ x1 * y2 - y1 * x2;
  
        var w4 = w3 * w1 + x3 * x1 + y3 * y1 + z3 * z1;
        var x4 = x3 * w1 - w3 * x1 - y3 * z1 + z3 * y1;
        var y4 = y3 * w1 - w3 * y1 - z3 * x1 + x3 * z1;
        var z4 = z3 * w1 - w3 * z1 - x3 * y1 + y3 * x1;
  
        return [x4, y4, z4];
      }
docs: Rotates a vector according to the current quaternion
  
  @param {Array} v The vector to be rotated
  @returns {Array}