Человек я, признаться, сугубо штатский. И школьную математику помню достаточно, чтобы знать, что углы измеряются в градусах. Ну, в крайнем случае, в радианах. Но тут возникла довольно нехарактерная для меня обратная геодезическая задача, в которой всё оказалось и вроде бы знакомо, и совершенно непривычно.
Итак, представим, что нас каким-то чудом занесло на артиллерийскую позицию, и командир батареи даёт вводную. Есть координаты огневой позиции (Xₒ, Yₒ), основное направление огневой позиции αₒ и координаты цели (Xₜ, Yₜ). Нужно определить топографическую дальность до цели Дₜ и доворот от основного направления на цель. А мы, разумеется, в этой теме, что называется, не шарим от слова "совсем". И компьютер дома забыли. И в приборе управления огнём батарейки сели. Что ж, будем разбираться.
Вводная:
огневая позиция: Xₒ = 66190, Yₒ = 93960, высота hₒ = 220, αₒ = 58-00
цель: Xₜ = 74920, Yₜ = 92070, высота hₜ = 170
Задача:
рассчитать топографические данные
Первым делом поймём, что за система координат используется. Поскольку тут пара чисел (X, Y), то возникает подозрение, что декартова. Но это не совсем так. Дело в том, что декартова система координат - это только на топографической карте. А система координат, привязанная к огневой позиции - полярная, на что намекает данное нам основное направление. Так что фактически требуется осуществить переход из декартовой системы координат в полярную.
Но если бы всё было так просто, было бы неинтересно. Требуется разобраться с направлением осей и углов поворота. Оказывается, в отличие от школьного учебника геометрии, в геодезии ось Ох направлена на север, а направление отсчёта углов - по часовой стрелке. То есть, используется левосторонняя система координат.
Ситуация для непривычного человека ещё больше запутывается выбором единиц измерения углов. Что это за загадочные "58-00", и как это соотносится с общеупотребительными градусами? Дело в том, что радианы и градусы - это для теоретиков, а у суровых практиков углы измеряются в тысячных. Фактически у них окружность разделена на 60 частей (так называемые большие деления угломера), а каждая из этих частей, в свою очередь, поделена на 100 маленьких дуг (малые деления угломера). Таким образом, вся окружность - это 6000 тысячных, а "58-00" - это 5800 тысячных, или 5800 ⋅ 2π/6000 ≈ 6.07 радиан, или 5800 ⋅ 360°/6000 ≈ 348°. То есть, в данный момент пушки смотрят примерно на северо-северо-запад.
Теперь можно приступать к решению задачи. Решать её можно привычным инструментарием - вычислить координаты вектора, соединяющего огневую позицию и цель, как разности координат:
ΔX = Xₜ - Xₒ
ΔY = Yₜ - Yₒ
по которым уже несложно определить длину этого вектора и прочие его характеристики:
Δh = hₜ - hₒ
Дₜ = √ ((ΔX)² + (ΔY)²)
αₜ = arctg (ΔY / ΔX)
откуда доворот на цель найдётся в виде разности αₜ - αₒ.
При наличии компьютера или, на худой конец, инженерного калькулятора эти вычисления сложности не представляют. В Javascript, например, вообще встроена функция Math.atan2, которая по двум аргументам-координатам вектора выдаёт направляющий угол, правда, в радианах. Аналогичная функция присутствует даже в табличных процессорах типа MS Excel.
Расчёт "в лоб":
Δh = 170 − 220 = -50
ΔX = 74920 − 66190 = 8730
ΔY = 92070 − 93960 = −1890
Дₜ = √ (8730² + (−1890)²) = √ 79785000 ≈ 8932
αₜ = atan2 (8730, −1890) ≈ −0,2132 радиан = −12,216° =
= 6000 ⋅ (360° − 12,216°) / 360° ≈ 5796 тысячных
αₜ - αₒ = 57-96 − 58-00 = −0-04
Ответ:
дальность до цели 8932, доворот на цель −0-04
Гораздо печальнее, если вычислительные возможности ограничены. Вручную вычислять корни и арктангенсы - то ещё удовольствие. И тут на помощь приходят вычислительные таблицы.
Вычислительная таблица для решения этой задачи устроена достаточно искусно. Во-первых, можно заметить, что арктангенсы всего диапазона углов нам не нужны - достаточно ограничиться диапазоном 0°-45°. В этом интервале тангенсы углов - меньше единицы, поэтому вычислив
β = arctg | min(ΔX, ΔY) / max(ΔX, ΔY) |
получим как раз угол из этого диапазона, а знания о знаках величин ΔX и ΔY и соотношении их абсолютных значений |ΔX| ≶ |ΔY| позволят сориентироваться, к какому углу найденный арктангенс прибавлять/отнимать.
Больше того, можно операцию вычитания заменить на сложение, если для стрелочек, направленных против часовой стрелки, предоставить числа в "дополнительном коде", то есть, например, заменить выражение, 45-00 − 00-23 на 44-00 + (100 − 00-23) = 44-00 + 00-77.
Рассмотрим работу с такой таблицей арктангенсов на вышеприведённом примере. Вычислитель получил значения:
ΔX = 74920 − 66190 = 8730
ΔY = 92070 − 93960 = −1890
значит, по таблице будет искать значение угла, ближайшее к 1890/8730 ≈ 0.216, и иметь в виду, что интересующий его угол лежит в секторе −ΔY/+ΔX. Поскольку в этом секторе стрелочка направлена против часовой стрелки, то его будет интересовать "дополнительный код". Сначала он найдёт, между какими большими делениями угломера лежит его угол, 57-00 - 58-00, а потом по более подробной таблице уточнит тысячные, 97 и получит ответ 57-97.
Осталось облегчить работу по извлечению корня. У нас есть вот такой треугольник, в котором мы знаем катеты и тангенс:
Очевидно, длина его гипотенузы равна max(|ΔX|, |ΔY|) ⋅ secβ. При этом secβ и tgβ в рассматриваемом интервале углов 0°-45° связаны взаимно однозначной зависимостью:
secβ = √ (1 + tg²β)
Эта формула, фактически, сводит извлечение корня из произвольного числа к извлечению корня из множества чисел, которое можно протабулировать. Поэтому добавив в таблицу арктангенсов ещё и заранее посчитанные значения секансов, получим полную информацию, позволяющуювычислять интересующие нас расстояния. В нашем примере по таблице вычислитель найдёт secβ = 1.023 и вычислит требуемое расстояние до цели: Дₜ = 8730 ⋅ 1.023 ≈ 8931.
В общем, война - дело тонкое, эх, а ещё школьники возмущаются, зачем им все эти синусы...
И, конечно, привожу библиографические данные учебного пособия, пара абзацев из которого развернулась в эту заметку:
"УЧЕБНИК СЕРЖАНТА РАКЕТНЫХ ВОЙСК И АРТИЛЛЕРИИ. Для начальников вычислительных команд"/ред. Е. В. Жукунов - М., 1990