All files / construct/domain_layer/library/structure Quaternion.bs.js

89.55% Statements 60/67
50% Branches 3/6
100% Functions 9/9
89.55% Lines 60/67

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137    7x 7x     2x                 2x 2x 2x 2x 2x       2x 2x 2x                                 2x       10x 10x 10x 10x 10x 10x 10x 10x 10x                 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x               7x     9x 9x 9x 9x   9x 9x       9x         9x 9x 9x       9x       9x 9x       8x 8x 8x 8x 8x               7x 7x 7x 7x 7x 7x 7x 7x 7x    
'use strict';
 
var Angle$Wonderjs = require("./Angle.bs.js");
var Vector3$Wonderjs = require("./Vector3.bs.js");
 
function conjugate(param) {
  return [
          param[0] * -1.0,
          param[1] * -1.0,
          param[2] * -1.0,
          param[3]
        ];
}
 
function length(param) {
  var w = param[3];
  var z = param[2];
  var y = param[1];
  var x = param[0];
  return Math.sqrt(x * x + y * y + z * z + w * w);
}
 
function normalize(tuple) {
  var len = length(tuple);
  Eif (len !== 0) {
    return [
            tuple[0] / len,
            tuple[1] / len,
            tuple[2] / len,
            tuple[3] / len
          ];
  } else {
    return [
            0,
            0,
            0,
            1
          ];
  }
}
 
function invert(tuple) {
  return normalize(conjugate(tuple));
}
 
function multiply(param, param$1) {
  var q2w = param$1[3];
  var q2z = param$1[2];
  var q2y = param$1[1];
  var q2x = param$1[0];
  var q1w = param[3];
  var q1z = param[2];
  var q1y = param[1];
  var q1x = param[0];
  return [
          q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y,
          q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z,
          q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x,
          q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z
        ];
}
 
function setFromEulerAngles(param) {
  var halfToRad = 0.5 * Angle$Wonderjs.getDegToRad(undefined);
  var ex = param[0] * halfToRad;
  var ey = param[1] * halfToRad;
  var ez = param[2] * halfToRad;
  var sx = Math.sin(ex);
  var cx = Math.cos(ex);
  var sy = Math.sin(ey);
  var cy = Math.cos(ey);
  var sz = Math.sin(ez);
  var cz = Math.cos(ez);
  return [
          sx * cy * cz - cx * sy * sz,
          cx * sy * cz + sx * cy * sz,
          cx * cy * sz - sx * sy * cz,
          cx * cy * cz + sx * sy * sz
        ];
}
 
var _getEulerAngles = (function(quat){
            var x, y, z, qx, qy, qz, qw, a2;
 
            qx = quat[0];
            qy = quat[1];
            qz = quat[2];
            qw = quat[3];
 
            a2 = 2 * (qw * qy - qx * qz);
            Iif (a2 <= -0.99999) {
                x = 2 * Math.atan2(qx, qw);
                y = -Math.PI / 2;
                z = 0;
            } else Iif (a2 >= 0.99999) {
                x = 2 * Math.atan2(qx, qw);
                y = Math.PI / 2;
                z = 0;
            } else {
                x = Math.atan2(2 * (qw * qx + qy * qz), 1 - 2 * (qx * qx + qy * qy));
                y = Math.asin(a2);
                z = Math.atan2(2 * (qw * qz + qx * qy), 1 - 2 * (qy * qy + qz * qz));
            }
 
            //return Vector3.create(x, y, z).scale(RAD_TO_DEG);
            return [x, y, z];
   });
 
function getEulerAngles(quat) {
  var rad_to_deg = 180 / Math.PI;
  return Vector3$Wonderjs.scale(_getEulerAngles(quat), /* Float */0, rad_to_deg);
}
 
function setFromAxisAngle(angle, axis) {
  var match = Vector3$Wonderjs.normalize(axis);
  var angle$1 = angle * 0.5 * Angle$Wonderjs.getDegToRad(undefined);
  var sa = Math.sin(angle$1);
  var ca = Math.cos(angle$1);
  return [
          sa * match[0],
          sa * match[1],
          sa * match[2],
          ca
        ];
}
 
exports.conjugate = conjugate;
exports.length = length;
exports.normalize = normalize;
exports.invert = invert;
exports.multiply = multiply;
exports.setFromEulerAngles = setFromEulerAngles;
exports._getEulerAngles = _getEulerAngles;
exports.getEulerAngles = getEulerAngles;
exports.setFromAxisAngle = setFromAxisAngle;
/* No side effect */