Как телефон считает собственные лупинги

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

Два датчика, которые есть в каждом телефоне

Акселерометр измеряет силы, которые действуют на телефон. Когда тот лежит на столе, акселерометр показывает земное притяжение — около 9,8 м/с². Гироскоп измеряет, как быстро телефон вращается вокруг каждой из трёх своих осей, в градусах в секунду.

Оба появились в телефонах, чтобы поворачивать экран, считать шаги и стабилизировать фото. Looping читает их через браузер десятки раз в секунду.

Как распознать полёт

В тот миг, когда телефон покидает руку, его больше ничто не толкает. Он в свободном падении — и на пути вверх, и на пути вниз, — и акселерометр почти ничего не показывает. Эта внезапная тишина и есть подпись полёта. Заканчивается он резким пиком, когда телефон останавливает рука или матрас.

Вращение смазывает картину: акселерометр стоит не точно в центре телефона, поэтому само вращение на него давит. Так что игра ищет не просто ноль. Она проверяет, что показания акселерометра в точности объясняются вращением, которое измерил гироскоп. Телефон, который трясут в руке или крутят на столе, эту проверку не проходит.

Чтобы полёт засчитали, он должен длиться не меньше 0,3 секунды: это около одиннадцати сантиметров вверх — достаточно, чтобы отличить бросок от подёргивания руки.

Как считаются обороты

В полёте гироскоп много раз в секунду выдаёт скорость вращения. Умножь каждое измерение на время, которое оно покрывает, сложи всё — и получишь полный угол, на который повернулся телефон, неважно, вокруг какой оси: через край (сальто), вокруг длинной оси (бочка) или плашмя, как юла (плоское вращение).

Один лупинг — это 360°. Число на экране — количество полных оборотов, а оборот засчитывается от 80 %. Те, кто смотрит на бросок, видят примерно на пятую часть оборота больше, чем есть в свободном полёте: телефон начинает крутиться ещё в руке и продолжает, когда его ловят. А рейтинг считается по полному углу, с точностью до градуса.

Откуда берётся высота

Игра не видит потолка: она засекает время полёта. Предмет, который подбросили вверх и поймали на той же высоте, половину времени полёта поднимается, а половину падает — отсюда и высота: 0,5 с в воздухе — это около 30 см, 0,75 с — около 70 см, одна секунда — около 1,2 м.

Это оценка. Поймаешь телефон ниже, чем бросил, — и цифра тебе немного польстит.

Когда датчик не успевает

У каждого гироскопа есть потолок: скорость вращения, выше которой он выдаёт одно и то же число. Мы намерили около 1150 °/с на одних Android-телефонах, 2300 °/с на других и 4000 °/с на свежем iPhone — это одиннадцать оборотов в секунду.

Когда бросок пробивает потолок, игра не выдумывает недостающие обороты. Она оставляет минимум, который действительно измерила, и пишет об этом в результате — или не засчитывает бросок, если ничего не может гарантировать. Результат может быть ниже правды; выше — никогда.

Почему результат считает сервер

Твой телефон записывает бросок, но не судит его. Сырые измерения уходят на сервер игры: он считает результат по одним правилам для всех и проверяет, что измерения описывают настоящий свободный полёт. Одна запись может быть засчитана только один раз.

Поэтому рейтингу можно доверять: никто не может отправить число — только бросок. Без сети бросок хранится на телефоне (до двенадцати бросков, семь дней) и засчитывается, когда связь вернётся.

Что игра читает, а что нет

Looping читает датчики движения, и ничего больше: ни камеры, ни микрофона, ни местоположения. Что записывается и как долго хранится, написано в правовой информации.

Играть в Looping

Узнать больше

English Français Español Português Deutsch Italiano Nederlands Polski Türkçe Русский Українська العربية हिन्दी বাংলা Bahasa Indonesia Tiếng Việt ไทย 日本語 한국어 中文