GPS навигация
Как работает спутниковая навигация
Когда ты открываешь карту на телефоне и видишь синюю точку — это работает спутниковая навигация. На орбите Земли сейчас летают сотни спутников от разных стран, и каждый из них постоянно посылает сигнал вниз.
У каждой крупной страны или союза своя система:
- GPS — американская, самая известная. Именно её название стало нарицательным для всей технологии.
- ГЛОНАСС — российская. Работает параллельно с GPS, и большинство телефонов принимают обе системы одновременно.
- Galileo — европейская. Создавалась как независимая гражданская альтернатива военным системам, с упором на точность.
- BeiDou — китайская. Самая молодая из больших систем, сейчас активно развивается.
Твой телефон скорее всего работает сразу с несколькими — это делает позиционирование точнее и надёжнее.
Как это работает. Каждый спутник постоянно посылает сигнал с двумя числами: точное время отправки и собственные координаты в пространстве. Телефон принимает сигналы от нескольких спутников и смотрит — через сколько времени дошёл каждый сигнал. Поскольку скорость сигнала известна, из задержки можно вычислить расстояние до спутника.
Один спутник говорит "ты где-то на этой сфере вокруг меня". Второй пересекает эту сферу и сужает до окружности. Третий оставляет две точки. Четвёртый выбирает одну — и это ты.
Это называется трилатерацией, и именно так твой телефон знает где ты находишься с точностью до нескольких метров.
Как это работает у нас
У нас GPS работает по тому же принципу. Несколько компьютеров расставлены в мире — они играют роль спутников. Черепашка отправляет запрос, компьютеры отвечают своими координатами, черепашка вычисляет свою позицию методом трилатерации.
Результат — настоящие координаты Minecraft, те самые X, Y, Z.
Команды GPS
| Команда | Что делает | Возвращает |
|---|---|---|
gps.locate() | Определить текущую позицию | x, y, z или nil, nil, nil |
gps.locate(timeout) | То же, но ждать не дольше timeout секунд | x, y, z или nil, nil, nil |
gps.locate(timeout, true) | То же, с выводом отладочной информации | x, y, z или nil, nil, nil |
По умолчанию gps.locate() ждёт ответа 2 секунды. Если нужно быстрее — передай меньший таймаут:
Если GPS-хосты не в зоне досягаемости или их меньше трёх — функция вернёт nil. Всегда проверяй перед использованием.
Координаты в Minecraft
В Minecraft мир трёхмерный, и каждая точка в нём описывается тремя числами — X, Y, Z.
| Ось | Направление | Что значит |
|---|---|---|
| X | Запад ←→ Восток | Положительный X — восток, отрицательный — запад |
| Y | Вниз ↕ Вверх | Y=0 — бедрок, Y=64 — уровень моря, Y=320 — небо |
| Z | Север ←→ Юг | Положительный Z — юг, отрицательный — север |
Например, координаты X=100, Y=64, Z=-250 означают: 100 блоков на восток от центра мира, на уровне моря, 250 блоков на север.
Центр мира — точка X=0, Y=0, Z=0. Мир генерируется в обе стороны от центра, поэтому координаты могут быть как положительными, так и отрицательными.
Практически это важно для добычи: алмазы и другие ценные руды в Minecraft 1.18+ встречаются на отрицательных значениях Y — то есть под уровнем бедрока прошлых версий. Самая богатая руда — около Y=-58.
GPS возвращает именно эти три числа. gps.locate() → x, y, z:
Расстояние между двумя точками
Зная текущую позицию и позицию цели, можно посчитать расстояние:
Если нужно расстояние только по горизонтали (без учёта высоты):
Сохранение точек маршрута
Удобный паттерн — сохранять важные точки во время работы и потом к ним возвращаться:
🚀 Задания
Задание 1 Напиши программу которая определяет GPS-координаты и красиво выводит их на экран. Если GPS недоступен — повторяй попытку раз в 3 секунды, не более 5 раз.
Задание 2 Сохрани текущую позицию черепашки как "старт". Заставь черепашку пройти несколько шагов в разных направлениях. В конце выведи расстояние до точки "старт".
Задание 3
Напиши функцию isNear(name, radius) которая возвращает true если черепашка находится ближе чем radius блоков от сохранённой точки.
Задание 4
Напиши программу-навигатор: спрашивает пользователя через read() координаты цели (X и Z), определяет свою позицию через GPS, и выводит: в какую сторону нужно идти (X больше или меньше, Z больше или меньше) и расстояние до цели.
Задание 5 Объясни своими словами: почему для GPS нужны минимум три источника сигнала? Что даёт каждый из них? Как это связано с геометрией?