Как измерить наклон телефона в плоскости XY с помощью акселерометра в Android

Я попытался использовать данные оси Z из SensorEvent.values, но он не обнаруживает вращения моего телефона в плоскости XY, т.е. Вокруг оси Z.

Я использую это как ссылку для координатных осей. Правильно ли это?

оси

Как измерить это движение с использованием значений акселерометра?

Эти игры делают что-то подобное: Extreme Skater , Doodle Jump.

PS: моя ориентация телефона будет пейзаж.

Solutions Collecting From Web of "Как измерить наклон телефона в плоскости XY с помощью акселерометра в Android"

По существу, здесь есть два случая: устройство лежит плоское, а не плоское. Плоскость здесь означает, что угол между поверхностью экрана устройства и плоскостью мира xy (я называю это наклоном) составляет менее 25 градусов или больше 155 градусов. Подумайте о том, что телефон лежит ровно или слегка наклонен немного от стола.

Сначала вам нужно нормализовать вектор акселерометра.
То есть, если g – это вектор, возвращаемый значениями события датчика акселерометра. В коде

float[] g = new float[3]; g = event.values.clone(); double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]); // Normalize the accelerometer vector g[0] = g[0] / norm_Of_g g[1] = g[1] / norm_Of_g g[2] = g[2] / norm_Of_g 

Тогда наклон можно рассчитать как

 int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2]))); 

таким образом

 if (inclination < 25 || inclination > 155) { // device is flat } else { // device is not flat } 

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

Для случая не плоского вращения (наклона) рассчитывается следующим образом

 int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1]))); 

Теперь вращение = 0 означает, что устройство находится в нормальном положении. Это портрет без какого-либо наклона для большинства телефонов и, возможно, для планшета. Поэтому, если вы держите телефон как на картинке выше и начинаете вращаться, вращение изменится, и когда телефон будет в пейзаже, вращение будет 90 или -90 зависит от направления вращения.