Как сопоставить ориентацию устройства со значениями MozOrientation - PullRequest
2 голосов
/ 30 января 2011

Ранее я создал лабиринтную игру, которая работает с MozOrientation в Firefox. Сейчас я пытаюсь заставить его работать и с WebKit ...

Но Webkit использует DeviceOrientation w3c. Значения кажутся совершенно разными, но у кого-то должен быть какой-то алгоритм, чтобы получить его от одного к другому? Или я упускаю что-то простое?

Игра в лабиринт со ссылкой на github http://playground.marmaladeontoast.co.uk/labyrinth/

MozOrientation https://developer.mozilla.org/en/Detecting_device_orientation

DeviceOrientation http://dev.w3.org/geo/api/spec-source-orientation.html

Некоторые примеры значений, которые я получил:

Chrome

alpha = null                                    
beta = -178 
gamma = 4.57    

Firefox

x = 0.035999998450279236
y = -0.02800000086426735
z = 1

Любая помощь будет принята с благодарностью:)

Ответы [ 4 ]

1 голос
/ 06 апреля 2011

Надеюсь, что эти коды все прояснят. Хотя значения, которые возвращает этот код, не могут быть напрямую сопоставлены со значениями бета и гаммы:

Mozilla возвращает грех угла так, чтобы получить угол ...

X: Math.asin(eventInfo.x)*180/Math.PI
Y: Math.asin(eventInfo.y)*180/Math.PI
Z: Math.asin(eventInfo.z)*180/Math.PI

Webkit возвращает ускорение в каждом топоре. Затем, чтобы получить угол ... (Синг-изменения просто унифицировать возвращаемые значения)

X: Math.asin(clean(eventInfo.accelerationIncludingGravity.x/GRAVITY))*180/Math.PI
Y: Math.asin(clean(-eventInfo.accelerationIncludingGravity.y/GRAVITY))*180/Math.PI
Z: Math.asin(clean(-eventInfo.accelerationIncludingGravity.z/GRAVITY))*180/Math.PI

Быть чистым: (потому что иногда данные возвращаются, даже без ускорения телефона, это больше, чем 9,8)

function clean(data)
{
    if(data<-1.0)
    {
        return -1.0; 
    }
    else
    {if(data>1.0)
    {
       return 1.0;
    }else
    {
        return data;
    }}
}

Значение каждого топора: X-> наклон мобильного телефона вправо или влево. Будет +, если вы наклоните телефон вправо (по часовой стрелке), удерживая кнопки громкости вверх. Y-> Сообщает, находится ли мобильный телефон вверх, если кнопка блокировки / включения находится в верхнем положении (угол +) или вниз (угол -). Это говорит о наклоне мобильного телефона относительно пола. (угол вектора Y с плоскостью X-Z) Z-> Сообщает, если мобильный экран направлен вверх (угол +) или вверх ногами (угол -). Это угол вектора Z на плоскости Y-X

Надеюсь, это достойно вас!

В любом случае, я работаю над некоторыми классами GWT, чтобы облегчить работу с этим :) Это не сложно, но у меня не так много времени. Я скажу тебе

1 голос
/ 08 февраля 2011

Я немного поиграл с этим. Источник ниже отображает обе альтернативы в понятный диапазон градусов для x / gamma и y / beta.

Значение MozOrientation.z полностью отличается от значения deviceorientation.alpha. Первый возвращает вертикальную ориентацию, второй возвращает значение компаса. Эти значения не являются взаимозаменяемыми / конвертируемыми.

function displayOrientation(orientData){

    var x = Math.round(orientData.x);
    var y = Math.round(orientData.y);
    var z = orientData.z;

    document.getElementById('x').value = x;
    document.getElementById('y').value = y;
    document.getElementById('z').value = z;
}

window.addEventListener("MozOrientation", function(orientData){

    var obj = {};
    obj.x = orientData.x * 90;
    obj.y = orientData.y * 90;
    obj.z = orientData.z;

    displayOrientation(obj);

}, true);

window.addEventListener("deviceorientation", function(orientData) {

    var obj = {};
    obj.x = orientData.gamma;
    obj.y = orientData.beta;
    obj.z = orientData.alpha;

    displayOrientation(obj);

}, true);

Похоже, что текущий настольный Safari (5.0.3) вообще не поддерживает это событие. Значение beta в настольном Chrome 9 ровно на 180 меньше, чем в мобильном Safari. Значения x & y в Firefox и мобильном Safari должны быть примерно одинаковыми.

0 голосов
/ 16 сентября 2014

Mozilla Firefox теперь полностью поддерживает API событий W3C DeviceOrientation.Вам больше не следует использовать MozOrientation в ваших веб-приложениях.

0 голосов
/ 23 марта 2011

Вы должны быть в состоянии рассчитать один в соответствии с другим. Проблема, которую я вижу, состоит в том, что Mozilla не сообщает, что означает возвращаемые данные. Сейчас я работаю с тремя мобильными устройствами: ipad, iphone4 и nokia n900. Когда я работаю с iOS и Safari и получаю ускорение, включая Gravity, я получаю значения от -9,8 до 9,8. Это значения силы тяжести, которые влияют на каждый топор. Затем, используя тригонометрию, я могу рассчитать угол в каждом топоре. Если я получу ориентацию в iphone4, я могу получить угол в каждом топоре.

Проблема возникает с Nokia N900, браузер которого основан на Mozilla. Этот браузер возвращает данные только от -1 до 1. Документация говорит, что это наклон каждого топора. В каких единствах? Косинус? Или просто угол / 180? Я предполагаю, что это косинус, так как когда я помещаю его в горизонтальное положение, он возвращает 0, а когда я помещаю его в вертикальное положение, он получает 1. И вверх ногами возвращает -1 Более того, если вы наклоните его примерно в 60 градусов, он вернется на 1/2.

Как я уже видел, при использовании ноутбука Macbook с Firefox данные x, y и z получают как косинус.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...