MCPcopy Create free account
hub / github.com/microsoft/SandDance / getRotation

Function getRotation

docs/app/js/sanddance-app.js:73607–73650  ·  view source on GitHub ↗
(out, mat)

Source from the content-addressed store, hash-verified

73605 return out;
73606}
73607function getRotation(out, mat) {
73608 var scaling = new _commonJs.ARRAY_TYPE(3);
73609 getScaling(scaling, mat);
73610 var is1 = 1 / scaling[0];
73611 var is2 = 1 / scaling[1];
73612 var is3 = 1 / scaling[2];
73613 var sm11 = mat[0] * is1;
73614 var sm12 = mat[1] * is2;
73615 var sm13 = mat[2] * is3;
73616 var sm21 = mat[4] * is1;
73617 var sm22 = mat[5] * is2;
73618 var sm23 = mat[6] * is3;
73619 var sm31 = mat[8] * is1;
73620 var sm32 = mat[9] * is2;
73621 var sm33 = mat[10] * is3;
73622 var trace = sm11 + sm22 + sm33;
73623 var S = 0;
73624 if (trace > 0) {
73625 S = Math.sqrt(trace + 1.0) * 2;
73626 out[3] = 0.25 * S;
73627 out[0] = (sm23 - sm32) / S;
73628 out[1] = (sm31 - sm13) / S;
73629 out[2] = (sm12 - sm21) / S;
73630 } else if (sm11 > sm22 && sm11 > sm33) {
73631 S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;
73632 out[3] = (sm23 - sm32) / S;
73633 out[0] = 0.25 * S;
73634 out[1] = (sm12 + sm21) / S;
73635 out[2] = (sm31 + sm13) / S;
73636 } else if (sm22 > sm33) {
73637 S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;
73638 out[3] = (sm31 - sm13) / S;
73639 out[0] = (sm12 + sm21) / S;
73640 out[1] = 0.25 * S;
73641 out[2] = (sm23 + sm32) / S;
73642 } else {
73643 S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;
73644 out[3] = (sm12 - sm21) / S;
73645 out[0] = (sm31 + sm13) / S;
73646 out[1] = (sm23 + sm32) / S;
73647 out[2] = 0.25 * S;
73648 }
73649 return out;
73650}
73651function fromRotationTranslationScale(out, q, v, s) {
73652 // Quaternion math
73653 var x = q[0], y = q[1], z = q[2], w = q[3];

Callers 1

computeInputDataFunction · 0.70

Calls 2

getScalingFunction · 0.70
getAngleFunction · 0.70

Tested by

no test coverage detected