JavaScript
deviceorientation

deviceorientationAPIを使う時にalpha,gammaがbeta90を超えた時に値が乱れるのをなおすやつ

メモ

  • deviceorientation使って、デバイスの傾きで中のワールドを回転させたいときなどに、スマホを垂直にした時に表示が崩れてしまう時
  • logなどで見てるとalphaやgammaの値が突然飛ぶ時
function getQuaternion(alpha, beta, gamma) {
    var _x = beta ? beta * degtorad : 0; // beta value
    var _y = gamma ? gamma * degtorad : 0; // gamma value
    var _z = alpha ? alpha * degtorad : 0; // alpha value

    var cX = Math.cos(_x / 2);
    var cY = Math.cos(_y / 2);
    var cZ = Math.cos(_z / 2);
    var sX = Math.sin(_x / 2);
    var sY = Math.sin(_y / 2);
    var sZ = Math.sin(_z / 2);

    var w = cX * cY * cZ - sX * sY * sZ;
    var x = sX * cY * cZ - cX * sY * sZ;
    var y = cX * sY * cZ + sX * cY * sZ;
    var z = cX * cY * sZ + sX * sY * cZ;

    return [x, y, z, w];
}

参考文献

まんまこれ
A.2 Alternate device orientation representations