Использование акселерометра Android без плоского устройства - PullRequest
2 голосов
/ 23 ноября 2010

В последнее время я играю с акселерометром Android, используя Android SDK и Adobe AIR for Android SDK на моем Motorola Droid.Что я заметил, так это то, что акселерометр работает просто отлично, но мне было интересно, можно ли каким-то образом компенсировать, чтобы мне не приходилось использовать устройство в горизонтальном положении.Другими словами, я хочу использовать акселерометр для управления моим визуальным дисплеем, но инициализировать его (или модифицировать каким-либо образом), чтобы мне не пришлось держать его на ровном месте (не очень весело при наклоне над телефоном).

Кто-нибудь знает, как мне удобно держать устройство в руке, скажем, 45 градусов, и при этом использовать акселерометр для показаний вперед / назад?Это возможно?Любые примеры этого доступны?

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Для этого вам понадобится простая математика умножения матриц. «Откалибруйте» вращение, взяв текущую матрицу при запуске приложения и инвертировав ее, затем умножив на нее все последующие матрицы - это даст вам дельту к начальной позиции.

0 голосов
/ 28 февраля 2011

Я работаю в проекте схожего характера, где функция акселерометра не ограничена положением. Мой способ справиться с этим очень прост: инициализировать акселерометр с текущими показаниями по умолчанию. Другими словами, у вас есть кнопка, которую вы нажимаете, как только у вас есть телефон в правильном положении, после нажатия кнопки текущие показания акселерометра (меры G) будут вашими справочными (нулевые значения), и вносить изменения, когда Вы идете выше или ниже этих показаний ... Надеюсь, это кому-нибудь поможет ... ура

0 голосов
/ 01 декабря 2010

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

1) Я получаю исходную матрицу вращения, используя - SensorManager.getRotationMatrix (R, I, gravity.clone (), geomagn.clone ()); (Гравитация и геомагнетизм - соответствующие матрицы ускорения и геомагнитности. Не знаю, почему я использую клоны, но должна быть какая-то причина.) 2) Теперь на любом этапе получите текущую матрицу вращения и назовите ее R. 3) Рассчитать обратную исходную матрицу и назвать ее «initialInverse». 4) Умножьте R на initialInverse (или наоборот, вам придется это выяснить). 5) Получите свою окончательную ориентацию, используя SensorManager.getOrientation (дельта, значения)

Извините, но я полностью забыл, что делает приведенный выше код. Я думаю, что я помню, как читал слова Euler Transform где-то, когда писал это приложение, вот что оно может делать. К сожалению, я не могу дать вам полный код, так как, вероятно, я выпущу это приложение на рынке. Однако, если вам нужна дополнительная информация, пожалуйста, дайте мне знать - я посмотрю код и свяжусь с вами.

...