相关疑难解决方法(0)

DeviceOrientationEvent:当 beta 接近/达到 90 度时如何处理疯狂的伽玛?

任何有 DeviceOrientationEvent 经验和手机/平板电脑的人吗?

在带有陀螺仪的设备上运行以下代码片段,我注意到 gamma(沿 y 轴向左/向右旋转)随着 beta 接近 90 度(设备指向正上方)变大且不可预测。我假设这是gimbal-lock

var data, raf, alpha = document.getElementById("alpha"),
  beta = document.getElementById("beta"),
  gamma = document.getElementById("gamma");

window.addEventListener("deviceorientation", processData);
window.addEventListener('click', togglePause);
updateText();

function processData(e) {
  data = e;
}

function updateText() {
  if (data) {
    alpha.textContent = Math.round(data.alpha);
    beta.textContent = Math.round(data.beta);
    gamma.textContent = Math.round(data.gamma);
  }
  raf = requestAnimationFrame(updateText);
}

function togglePause(e) {
  if (raf) {
    cancelAnimationFrame(raf);
    raf = null;
    window.removeEventListener("deviceorientation", processData);
  } else {
    window.addEventListener("deviceorientation", processData);
    raf = requestAnimationFrame(updateText);
  }
}
Run Code Online (Sandbox Code Playgroud)
body …
Run Code Online (Sandbox Code Playgroud)

javascript mobile device-orientation gyroscope

7
推荐指数
1
解决办法
1365
查看次数

使用四元数的设备方向

我已经编写了一个JS SDK,可以监听移动设备的旋转,并提供3个输入:

?:角度可以在0到360度之间变化
吗?:-180至180度之间的角度
?:-90至90度之间的角度

设备旋转文档

我曾尝试使用Euler Angles确定设备方向,但遇到了万向节锁定效应,当设备指向上方时,该计算会爆炸。这导致我使用Quaternion,而不受万向节锁定效应的影响。

我已经找到了可转换?,?的js库。和?到四元数,因此对于以下值:

:81.7324
:74.8036
吗?:-84.3221

我得到这个四元数的ZXY订单:

w:0.7120695154301472
x:0.6893688637611577
y:-0.10864439143062626
z:0.07696733776346154

码:

var rad = Math.PI / 180;
window.addEventListener("deviceorientation", function(ev) {

  // Update the rotation object
  var q = Quaternion.fromEuler(ev.alpha * rad, ev.beta * rad, ev.gamma * rad, 'ZXY');

  // Set the CSS style to the element you want to rotate
  elm.style.transform = "matrix3d(" + q.conjugate().toMatrix4() + ")";

}, …
Run Code Online (Sandbox Code Playgroud)

javascript mobile android ios sensors

6
推荐指数
1
解决办法
289
查看次数