Какой тип функции арккасангенс использовался, функция только с одним аргументом или знаменитая функция atan2(y, x) или arctan2(y, x) с двумя аргументами x и y? Какая аппроксимация использовалась?
Первое, что вы должны понять, это то, что хотя ARCTAN
он вызывается в 3-х местах в коде Аполлона, в каждом случае он используется для преобразования прямолинейных координат (x, y, z) в сферические координаты (r, широта, долгота).
Я опишу, как ARCTAN
используется в LAT-LONG
подпрограмме, в файле LATITUDE_LONGITUDE_SUBROUTINES.agc , хотя использование аналогично в других вызывающих программах. Первым шагом является вычисление гаммы =
(строки 77-82). Затем мы делим x и y на гамму; x/gamma хранится в глобальной переменной COSTH
, а y/gamma хранится в глобальной переменной SINTH
(строки 83-87). Теперь мы готовы вызвать ARCTAN
подпрограмму (строка 88). После возврата результат сохраняется в глобальной переменной LAT
(строка 89). Аналогичный набор вычислений определяет долготу.
77: DLOAD DSQ
78: ALPHAV
79: PDDL DSQ
80: ALPHAV +2
81:# Page 1237
82: DAD SQRT
83: DMP SL1R
84: GAMRP
85: STODL COSTH # COS(LAT) B-1
86: ALPHAV +4
87: STCALL SINTH # SIN(LAT) B-1
88: ARCTAN
89: STODL LAT # LAT B0
Как и atan2 (), ARCTAN
принимает два аргумента. Однако, в отличие от atan2 (), аргументы уже должны быть предварительно разделены. Другими словами, они должны быть в диапазоне от -1 до +1, а сумма их квадратов должна равняться 1. Аргументы берутся из глобальных переменных COSTH
и SINTH
. Как следует из названий и из-за предварительного деления, эти аргументы являются косинусом и синусом угла, который мы ищем. Основная часть подпрограммы проверяет знак +/- аргументов, корректируя результат для соответствующего квадранта. Основной расчет выполняется вызовом ASIN
с аргументом SINTH
(строка 219).
196: # Page 1240
197: # ARCTAN SUBROUTINE
198: #
199: # CALLING SEQUENCE
200: # SIN THETA IN SINTH B-1
201: # COS THETA IN COSTH B-1
202: # CALL ARCTAN
203: #
204: # OUTPUT
205: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2
206:
207: ARCTAN BOV
208: CLROVFLW
209: CLROVFLW DLOAD DSQ
210: SINTH
211: PDDL DSQ
212: COSTH
213: DAD
214: BZE SQRT
215: ARCTANXX # ATAN=0/0. SET THETA=0
216: BDDV BOV
217: SINTH
218: ATAN=90
219: SR1 ASIN
220: STORE THETA
221: PDDL BMN
222: COSTH
223: NEGCOS
224: DLOAD RVQ
225: NEGCOS DLOAD DCOMP
226: BPL DAD
227: NEGOUT
228: DP1/2
229: ARCTANXX STORE THETA
230: RVQ
231:
232: NEGOUT DSU GOTO
233: DP1/2
234: ARCTANXX
235: ATAN=90 DLOAD SIGN
236: LODP1/4
237: SINTH
238: STORE THETA
239: RVQ
ASIN
это макрос для ARCSIN
подпрограммы в файле INTERPRETER.agc . В свою очередь, он вычисляется из арккосинуса с использованием соотношения ARCSIN(X) = PI/2 - ARCCOS(X). (Строки 2704-2705. Да, хотя у нас уже есть косинус, хранящийся в COSTH
.) ARCCOS
вычисляется с использованием «приближения Гастингса» и полинома 7-й степени.
Результатом каждой из подпрограмм обратного триггера являются углы в диапазоне от -1/2 до +1/2. Чтобы перевести в радианы, нужно умножить на .
Итак, аргументов два, но их надо предварительно разделить, а результат умножить на .
Здесь вы можете увидеть исходный код компьютера управления Apollo 11.
Внутри см. Подпрограмму для ARCTAN.
Отвечает на ваш вопрос?
Волшебная урна с осьминогом