Ускорение из-за силы тяжести всегда будет присутствовать. Похоже, вы вычитаете это значение из одной из осей, когда устройство находится в определенной ориентации.
Что нужно сделать для обнаружения жестов - это выявить крошечную разницу, которая мгновенно появляется из-за ускорения из-за силы тяжести, когда устройства начинают двигаться. Вы не сможете определить, неподвижно или движется устройство с постоянной скоростью, но вы сможете определить, будет ли оно поворачиваться или ускоряться.
Значения (x, y, z) дают вам вектор, который дает направление ускорения. Вы можете вычислить (квадрат) длины этого вектора как x^2 + y^2 + x^2. Если это то же самое, что когда устройство находится в состоянии покоя, вы знаете, что устройство не ускорено, но в определенной ориентации. (Либо в покое, либо при движении с постоянной скоростью.)
Для обнаружения движения необходимо заметить кратковременное изменение длины этого вектора, когда устройство начинает двигаться, и снова, когда оно остановлено. Это изменение, вероятно, будет крошечным по сравнению с гравитацией.
Вам нужно будет сравнить ориентацию вектора ускорения во время движения, чтобы определить направление движения. Обратите внимание, что вы не сможете отличить каждый жест. Например, перемещение устройства вперед (и остановка там) имеет тот же эффект, что слегка наклоняет устройство, а затем возвращает его в ту же ориентацию.
Простые жесты для обнаружения - это те, которые меняют ориентацию устройства. Других жестов, таких как пробивание, будет сложнее обнаружить. Они будут отображаться как изменение длины вектора ускорения, но количество изменений, вероятно, будет крошечным.
РЕДАКТИРОВАТЬ:
Приведенные выше рассуждения для нормализованных значений х, у и г. Вам нужно будет определить значения для вычитания из показаний, чтобы получить вектор. Из вышеприведенного комментария выглядит, что 766 - это «нулевые» значения для вычитания. Но они могут отличаться для разных осей вашего устройства. Измерьте показания с помощью устройств, ориентированных во всех шести направлениях. Это получить максимальное и минимальное значения для x, y и z. Центральные значения должны быть на полпути между крайностями (и, надеюсь, 766).
Определенные жесты будут иметь контрольные подписи.
Снижение устройства мгновенно уменьшает вектор ускорения, а затем увеличивает его на мгновение, когда устройство останавливается.
Подъем устройства увеличит вектор на мгновение, прежде чем уменьшать его на мгновение.
Движение в прямом направлении на мгновение увеличит вектор, но слегка наклонит его вперед, а затем увеличит его снова на мгновение, но наклонится назад, когда устройство остановится.
В большинстве случаев длина вектора будет равна ускорению силы тяжести.
Вы должны сказать, какой вывод вы require – teabot
Вы имеете в виду: вы меняете направление устройства, и цифры становятся ненулевыми, даже если они не двигаются ИЛИ вы имеете в виду, что вы меняете направление устройства, а номера отключены, когда вы перемещаете его с этой новой позиции? – colithium
Спасибо, если я изменяю ориентацию устройства, значения меняются (ноль), даже если устройство не перемещается. Выход I требует (x, y, z) быть (0,0,0), если устройство не движется.Сделать ориентацию (направленную) независимой, – Madni