相关疑难解决方法(0)

如何在 Javascript 中为 iOS 和 Android 创建可靠的指南针?

我正在尝试在 Javascript/JQuery(使用设备方向)中创建一个可靠的指南针,以便它可以在 iOS 和 Android 移动设备上运行。我知道 Stackoverflow 中关于这个主题的几乎所有(非常古老的)问题/答案。我创建了一个非常简单的指南针,它在 iOS 设备上运行良好。在 Android 设备 (Galaxy S8) 上,我有一个奇怪的行为:就像我每天都在测试罗盘方向北切换到 -45/+45、90(北在东)、180(北在南)的偏移量) 或 270 度(北在西)。是的,我考虑过指南针校准(8 位数运动,在测试前将手机绕 3 个轴转动)。

这是指南针的 Javascript 代码:

if (isIos()) // // Function in the background evaluating OS
{ 
    window.addEventListener('deviceorientation', function(event) {
        var alpha;

        // Use Webkit heading for iOS
        alpha = event.webkitCompassHeading;
        if (alpha < 0) { alpha += 360; }
        if (alpha > 360) { alpha -= 360; }

        // Calculated heading
        console.log (alpha);
    });
}
else {
    // Any other …
Run Code Online (Sandbox Code Playgroud)

javascript deviation device-orientation compass

8
推荐指数
1
解决办法
1393
查看次数

从DeviceOrientation事件API计算罗盘方向

对于智能手机的增强现实网络应用程序,我正在尝试计算当用户手持设备时的罗盘方向,屏幕在垂直平面中,屏幕顶部朝上.

我从http://dev.w3.org/geo/api/spec-source-orientation(参见工作示例)中采用了建议的公式,并实现了以下功能:

function compassHeading(alpha, beta, gamma) {
    var a1, a2, b1, b2;
    if ( beta !== 0 || gamma !== 0 ) {
        a1 = -Math.cos(alpha) * Math.sin(gamma);
        a2 = Math.sin(alpha) * Math.sin(beta) * Math.cos(gamma);
        b1 = -Math.sin(alpha) * Math.sin(gamma);
        b2 = Math.cos(alpha) * Math.sin(beta) * Math.cos(gamma);
        return Math.atan((a1 - a2) / (b1 + b2)).toDeg();
    }
    else {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

而.toDeg()是一个Number对象扩展,由http://www.movable-type.co.uk/scripts/latlong.html提供

/** Converts radians to numeric (signed) degrees */
if (typeof Number.prototype.toDeg == 'undefined') { …
Run Code Online (Sandbox Code Playgroud)

math firefox html5 google-chrome

5
推荐指数
1
解决办法
7336
查看次数

如何计算给定 (x,y,z) 磁力计和加速度计数据的航向(N/W/S/E)?

我正在使用react-native-sensor从这些传感器中获取原始数据。

import {magnetometer, acclerometer} from 'react-native-sensors';
const subscription = accelerometer.subscribe(({ x, y, z, timestamp }) =>
    console.log({ x, y, z, timestamp })
    this.setState({ accelerometer: { x, y, z, timestamp } })
);
const subscription = magnetometer.subscribe(({ x, y, z, timestamp }) => 
    console.log({ x, y, z })
    this.setState({ magnetometer: { x, y, z, timestamp } })
);
Run Code Online (Sandbox Code Playgroud)

给定这6个数据点,我怎样才能得到程度和方向?什么是合适的算法?

我不明白这个答案中的算法。这个答案使用了 alpha、beta、gamma...与“x、y、z”相同吗?为什么只使用 3 个数据点而不是 6 个?为什么其他一些答案说需要加速度计数据(用于倾斜调整?)。为什么没有利用所有 6 个数据点的答案?

(注意:文档中有“磁力计”的拼写错误)

javascript geolocation core-location cllocation sensors

4
推荐指数
2
解决办法
4940
查看次数