使用JS计算智能手机的基本方向

奥古斯特·耶勒姆森

在JavaScript中,我们可以获得设备的alpha,beta和gamma角度。

  • alpha:绕z轴旋转[0,360]
  • beta:绕x轴旋转[90,-90]
  • 伽玛:绕y轴旋转[180,-180]

window.addEventListener('deviceorientation', (event)=>{

    const alpha = event.alpha; // Returns the rotation of the device around the Z axis
    const beta = event.beta;  // Returns the rotation of the device around the X axis; that is, the number of degrees, ranged between -180 and 180
    const gamma = event.gamma; // Returns the rotation of the device around the Y axis; that is, the number of degrees, ranged between -90 and 90

    console.log(`alpha: ${alpha}, beta: ${beta}, gamma: ${gamma}`);

}, false);

但是,我想使用这些角度确定设备的基本方向(北,西,东和南)。

我的问题:
是否可以仅使用Alpha角确定设备的基本方向,还是应该同时使用beta和gamma?
如果需要beta和gamma;为了计算基本方向,我应该如何在计算中使用它们,我应该知道什么公式吗?

奥古斯特·耶勒姆森
var heading;

window.addEventListener('deviceorientation', handleOrientation, false);

const handleOrientation = (event) => {
    if(event.webkitCompassHeading) {
        // some devices don't understand "alpha" (especially IOS devices)
        heading = event.webkitCompassHeading;
    }
    else{
        heading = compassHeading(event.alpha, event.beta, event.gamma);
    }
};

const compassHeading = (alpha, beta, gamma) => {

    // Convert degrees to radians
    const alphaRad = alpha * (Math.PI / 180);
    const betaRad = beta * (Math.PI / 180);
    const gammaRad = gamma * (Math.PI / 180);

    // Calculate equation components
    const cA = Math.cos(alphaRad);
    const sA = Math.sin(alphaRad);
    const cB = Math.cos(betaRad);
    const sB = Math.sin(betaRad);
    const cG = Math.cos(gammaRad);
    const sG = Math.sin(gammaRad);

    // Calculate A, B, C rotation components
    const rA = - cA * sG - sA * sB * cG;
    const rB = - sA * sG + cA * sB * cG;
    const rC = - cB * cG;

    // Calculate compass heading
    let compassHeading = Math.atan(rA / rB);

    // Convert from half unit circle to whole unit circle
    if(rB < 0) {
        compassHeading += Math.PI;
    }else if(rA < 0) {
        compassHeading += 2 * Math.PI;
    }

    // Convert radians to degrees
    compassHeading *= 180 / Math.PI;

    return compassHeading;
};

上面的代码受以下链接的启发:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用libGDX访问智能手机的相机

来自分类Dev

平板电脑/智能手机和触摸屏计算机不同

来自分类Dev

检测平板电脑和智能手机

来自分类Dev

OOP设计与智能手机的性能

来自分类Dev

获取智能手机的标识符

来自分类Dev

如何使我的网站响应智能手机

来自分类Dev

如何安装智能手机以恢复文件

来自分类Dev

大屏幕智能手机的RWD失败

来自分类Dev

与iPhone /智能手机共享RAM?

来自分类Dev

从智能手机下载照片

来自分类Dev

仅为智能手机加载不同的JavaScript

来自分类Dev

压缩来自智能手机的视频

来自分类Dev

ExtJS 4 智能手机尺寸

来自分类Dev

CSS 媒体智能手机

来自分类Dev

智能手机文本输入“完成”的 JS 事件处理程序是什么

来自分类Dev

如何使用Convertigo将jQueryMobile项目安装到智能手机中?

来自分类Dev

对Rhomobile(跨平台使用Ruby构建智能手机)有何反馈?

来自分类Dev

使用智能手机摄像头识别字母

来自分类Dev

使用Android Samsung Galaxy智能手机获取邻近细胞信息

来自分类Dev

如何使用JavaScript启用或禁用智能手机的GPS服务?

来自分类Dev

对Rhomobile(跨平台使用Ruby构建智能手机)有何反馈?

来自分类Dev

Android / WiFi Direct-如何使用智能手机查找PC并建立连接

来自分类Dev

使用智能手机作为拨号调制解调器?

来自分类Dev

使用android三星galaxy智能手机获取邻近细胞信息

来自分类Dev

如何使用Javascript发现智能手机或平板电脑的型号?

来自分类Dev

智能手机外壳中使用的磁铁会损坏设备吗?

来自分类Dev

如何使用智能手机从VirtualBox访问localhost?

来自分类Dev

如何使用智能手机作为安装媒体来安装Ubuntu?

来自分类Dev

如何使用USB电缆通过android智能手机访问dslr

Related 相关文章

  1. 1

    使用libGDX访问智能手机的相机

  2. 2

    平板电脑/智能手机和触摸屏计算机不同

  3. 3

    检测平板电脑和智能手机

  4. 4

    OOP设计与智能手机的性能

  5. 5

    获取智能手机的标识符

  6. 6

    如何使我的网站响应智能手机

  7. 7

    如何安装智能手机以恢复文件

  8. 8

    大屏幕智能手机的RWD失败

  9. 9

    与iPhone /智能手机共享RAM?

  10. 10

    从智能手机下载照片

  11. 11

    仅为智能手机加载不同的JavaScript

  12. 12

    压缩来自智能手机的视频

  13. 13

    ExtJS 4 智能手机尺寸

  14. 14

    CSS 媒体智能手机

  15. 15

    智能手机文本输入“完成”的 JS 事件处理程序是什么

  16. 16

    如何使用Convertigo将jQueryMobile项目安装到智能手机中?

  17. 17

    对Rhomobile(跨平台使用Ruby构建智能手机)有何反馈?

  18. 18

    使用智能手机摄像头识别字母

  19. 19

    使用Android Samsung Galaxy智能手机获取邻近细胞信息

  20. 20

    如何使用JavaScript启用或禁用智能手机的GPS服务?

  21. 21

    对Rhomobile(跨平台使用Ruby构建智能手机)有何反馈?

  22. 22

    Android / WiFi Direct-如何使用智能手机查找PC并建立连接

  23. 23

    使用智能手机作为拨号调制解调器?

  24. 24

    使用android三星galaxy智能手机获取邻近细胞信息

  25. 25

    如何使用Javascript发现智能手机或平板电脑的型号?

  26. 26

    智能手机外壳中使用的磁铁会损坏设备吗?

  27. 27

    如何使用智能手机从VirtualBox访问localhost?

  28. 28

    如何使用智能手机作为安装媒体来安装Ubuntu?

  29. 29

    如何使用USB电缆通过android智能手机访问dslr

热门标签

归档