🦊 FoxWiki

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 секунды. Если нужно быстрее — передай меньший таймаут:

Редактор Lua
1

Если 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:

Редактор Lua
1
2
3
4
5
6
7
8
9
10

Расстояние между двумя точками

Зная текущую позицию и позицию цели, можно посчитать расстояние:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13

Если нужно расстояние только по горизонтали (без учёта высоты):

Редактор Lua
1
2
3

Сохранение точек маршрута

Удобный паттерн — сохранять важные точки во время работы и потом к ним возвращаться:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

🚀 Задания

Задание 1 Напиши программу которая определяет GPS-координаты и красиво выводит их на экран. Если GPS недоступен — повторяй попытку раз в 3 секунды, не более 5 раз.

Задание 2 Сохрани текущую позицию черепашки как "старт". Заставь черепашку пройти несколько шагов в разных направлениях. В конце выведи расстояние до точки "старт".

Задание 3 Напиши функцию isNear(name, radius) которая возвращает true если черепашка находится ближе чем radius блоков от сохранённой точки.

Задание 4 Напиши программу-навигатор: спрашивает пользователя через read() координаты цели (X и Z), определяет свою позицию через GPS, и выводит: в какую сторону нужно идти (X больше или меньше, Z больше или меньше) и расстояние до цели.

Задание 5 Объясни своими словами: почему для GPS нужны минимум три источника сигнала? Что даёт каждый из них? Как это связано с геометрией?

НазадФункции
ДалееВвод данных