Атан2


В вычислительной технике и математике функция представляет atan2 с двумя аргументами собой арктангенс . По определению, — мера угла (в радианах , с ) между положительными -ось и луч от начала координат до точки в декартовой плоскости . Эквивалентно, — аргумент (также называемый фазой или углом ) комплексного числа
The Функция впервые появилась в языке программирования Фортран в 1961 году. Первоначально она предназначалась для возврата правильного и однозначного значения угла θ при преобразовании из декартовых координат ( x , y ) в полярные координаты ( r , θ ) . Если и , затем и
Если x > 0 , желаемая угловая мера равна Однако, когда x < 0 , угол желаемому диаметрально противоположен углу, и необходимо добавить ± π (полоборота ) , чтобы поместить точку в правильный квадрант . [1] Используя функция устраняет эту коррекцию, упрощая код и математические формулы.
Мотивация [ править ]

Обычная функция арктангенса с одним аргументом возвращает только угловые значения в интервале и при его вызове для нахождения меры угла между осью x и произвольным вектором в декартовой плоскости не существует простого способа указать направление в левой полуплоскости (то есть точку с ). Диаметрально противоположные угловые меры имеют одинаковый тангенс, потому что так что касательная само по себе недостаточно для однозначного определения угла.
Чтобы определить величину угла с помощью функции арктангенса по заданной точке или вектору. математические формулы или компьютерный код должны обрабатывать несколько случаев; хотя бы один для положительных значений и один для отрицательных значений а иногда и дополнительные случаи, когда отрицательно или одна координата равна нулю. Поиск угловых мер и преобразование декартовых координат в полярные широко распространены в научных вычислениях, и этот код является избыточным и подвержен ошибкам.
Чтобы исправить это, в языках программирования была введена функция atan2 , по крайней мере, еще в языке Fortran IV 1960-х годов. [2] Величина atan2( y , x ) является мерой угла между осью x и лучом от начала координат до точки ( x , y ) в любом месте декартовой плоскости. Знаки / x y и ( используются для определения результата и выбора правильной ветви многозначной функции Arctan y квадранта x ) .
Функция atan2 полезна во многих приложениях, связанных с евклидовыми векторами, таких как поиск направления от одной точки к другой или преобразование матрицы вращения в углы Эйлера .
Функция atan2 теперь включена во многие другие языки программирования, а также часто встречается в математических формулах науки и техники.
Порядок аргументов [ править ]
В 1961 году Фортран представил функцию atan2 с порядком аргументов. так что аргумент (фазовый угол) комплексного числа равен Это соответствует порядку дробей слева направо, записанному так что для положительных значений Однако это противоположно обычному порядку компонентов для комплексных чисел: или как координаты См. раздел Определение и расчет .
Некоторые другие языки программирования (см. § Реализации функции в распространенных компьютерных языках ) вместо этого выбрали противоположный порядок. Например, Microsoft Excel использует OpenOffice Calc использует и Mathematica использует по умолчанию используется арктангенс с одним аргументом, если вызывается с одним аргументом.
Определение и расчет [ править ]
Функция atan2 вычисляет главное значение функции аргумента , примененной к комплексному числу x + i y . То есть atan2( y , x ) = Pr arg( x + i y ) = Arg( x + i y ) . Аргумент можно изменить на произвольное число, кратное 2π (что соответствует полному повороту вокруг начала координат), без какого-либо изменения угла, но для однозначного определения atan2 используется главное значение в диапазоне , то есть - π < atan2( y , x ) ≤ π .
С точки зрения стандартной функции арктанга , диапазон которой равен (−π/2, π/2) , ее можно выразить следующим образом, чтобы определить поверхность, которая не имеет разрывов, кроме как вдоль полубесконечной линии x<0 y=0:
Компактное выражение с четырьмя перекрывающимися полуплоскостями:
Обозначение скобок Айверсона позволяет получить еще более компактное выражение: [примечание 1]
Формула без явной условной конструкции :
Следующее выражение, полученное из формулы касательного полуугла, также можно использовать для определения atan2 :
Вариант последней формулы, позволяющий избежать завышенных ошибок округления:

Примечания:
- Это дает результаты в диапазоне (−π, π] . [примечание 2]
- Как упоминалось выше, главное значение аргумента atan2( y , x ) может быть связано с arctan( y / x ) посредством тригонометрии. Вывод происходит следующим образом: Если ( Икс , у ) = ( р потому что θ , р грех θ ) , то tan( θ /2) = y / ( р + x ) . Отсюда следует, что Обратите внимание, что √ x 2 + и 2 + x ≠ 0 в рассматриваемой области.
Производная [ править ]
Поскольку функция atan2 является функцией двух переменных, она имеет две частные производные . В точках, где эти производные существуют, atan2 , за исключением константы, равен arctan( y / x ) . Следовательно, для x > 0 или y ≠ 0 ,
Таким образом, градиент atan2 определяется выражением
Неформальное представление функции atan2 как угловой функции θ ( x , y ) = atan2( y , x ) (которая определена только с точностью до константы) дает следующую формулу для полного дифференциала :
Хотя функция atan2 является разрывной вдоль отрицательной оси x , что отражает тот факт, что угол не может быть определен непрерывно, эта производная определена непрерывно, за исключением начала координат, что отражает тот факт, что бесконечно малые (и даже локальные) изменения угла могут быть определены везде. кроме происхождения. Интегрирование этой производной по пути дает общее изменение угла по пути, а интегрирование по замкнутому контуру дает число витков .
На языке дифференциальной геометрии эта производная есть одноформа , причем она замкнута (ее производная равна нулю), но не точна (она не является производной 0-формы, т. е. функцией), и фактически она порождает первые когомологии де Рама плоскости проколотой . Это самый простой пример такой формы, и он является фундаментальным в дифференциальной геометрии.
Частные производные atan2 не содержат тригонометрических функций, что делает их особенно полезными во многих приложениях (например, встроенных системах), где вычисление тригонометрических функций может оказаться дорогостоящим.
Иллюстрации [ править ]

На этом рисунке показаны значения atan2 вдоль выбранных лучей от начала координат, отмеченных единичным кругом. Значения в радианах показаны внутри круга. В диаграмме используется стандартное математическое соглашение, согласно которому углы увеличиваются против часовой стрелки от нуля вдоль луча вправо. Обратите внимание, что порядок аргументов обратный; функция atan2( y , x ) вычисляет угол, соответствующий точке ( x , y ) .

На этом рисунке показаны значения вместе с для . Обе функции нечетные и периодические с периодами и соответственно, и, таким образом, может быть легко дополнено к любой области реальных значений . Хорошо видны срезы ветвей -функция в и -функция в . [3]
На двух рисунках ниже показаны трехмерные виды соответственно atan2( y , x ) и arctan( y / x ) над областью плоскости. что для atan2( y , x ) Обратите внимание , лучи в X / Y -плоскости, исходящие из начала координат, имеют постоянные значения, а для arctan( y / x ) линии в X / Y -плоскости, проходящие через начало координат, имеют постоянные значения. При x > 0 две диаграммы дают одинаковые значения.
![]() | ![]() |
Тождество суммы и разности углов [ править ]
Сумма или разность нескольких углов, вычисляемая по формуле альтернативно могут быть вычислены путем составления их как комплексных чисел . Учитывая две пары координат и , их углы от положительных оси будут составлены (и длины умножены), если они рассматриваются как комплексные числа, а затем умножаются вместе, . Полученный угол можно найти с помощью одного операции, пока результирующий угол лежит в :
и аналогично для более чем двух пар координат. Если составленный угол пересекает отрицательный -ось (т.е. выходит за пределы диапазона ), то пересечения можно посчитать и найти соответствующее целое число, кратное добавлено к окончательному результату, чтобы исправить его.
Эта разностная формула часто используется на практике для вычисления угла между двумя плоскими векторами , поскольку результирующий угол всегда находится в диапазоне .
: восток против часовой стрелки, север часовой стрелки, юг часовой стрелки и т. д Условные обозначения .
The Функция изначально была разработана для соглашения в чистой математике, которое можно назвать восток-против часовой стрелки . Однако в практических приложениях по северной и южной часовой стрелке часто нормой являются соглашения . Например, в науках об атмосфере направление ветра можно рассчитать с помощью функция с восточным и северным компонентами вектора ветра в качестве аргументов; [4] Угол азимута Солнца можно рассчитать аналогичным образом, используя в качестве аргументов восточную и северную компоненты солнечного вектора. Направление ветра обычно определяется по направлению на север по часовой стрелке, а угол азимута Солнца широко использует соглашения как по северной, так и по южной часовой стрелке. [5] Эти различные соглашения можно реализовать, поменяв местами позиции и изменив знаки аргументов x и y следующим образом:
- (Восточная конвенция против часовой стрелки)
- (Конвенция по северной часовой стрелке)
- . (Конвенция по южной часовой стрелке)
В качестве примера позвольте и , то формат восток-против часовой стрелки дает , формат по северной часовой стрелке дает , а формат по южной часовой стрелке дает .
Изменение знака аргументов x и/или y и/или замена их позиций может создать 8 возможных вариантов функции и они, что интересно, соответствуют 8 возможным определениям угла, а именно, по часовой стрелке или против часовой стрелки, начиная с каждого из 4 сторон света : севера, востока, юга и запада.
функции на распространенных компьютерных Реализации языках
Реализация функции отличается от одного компьютерного языка к другому:
- В Microsoft Excel , [6] OpenOffice.org Calc , LibreOffice Calc , [7] таблицы Google , [8] и номера iWork , [9] функция арктангенса с двумя аргументами имеет два аргумента в стандартной последовательности (перевернуто по сравнению с соглашением, использованным в обсуждении выше).
- В Mathematica форма
ArcTan[x, y]
используется там, где форма с одним параметром предоставляет нормальный арктангенс. Система Mathematica классифицируетArcTan[0, 0]
как неопределенное выражение. - На большинстве графических калькуляторов TI (за исключением TI-85 и TI-86 ) эквивалентная функция называется R►Pθ и имеет аргументы .
- В TI-85 функция arg называется
angle(x,y)
и хотя кажется, что он принимает два аргумента, на самом деле у него есть только один комплексный аргумент, который обозначается парой чисел: x + i y = ( x , y ) .
The соглашение используется:
- Функция С
atan2
и большинство других компьютерных реализаций предназначены для уменьшения усилий по преобразованию декартовых координат в полярные и поэтому всегда определяютatan2(0, 0)
. В реализациях без знакового нуля или при наличии положительных нулевых аргументов он обычно определяется как 0. Он всегда будет возвращать значение в диапазоне [-π, π], а не вызывать ошибку или возвращать NaN (не число). - В Common Lisp , где существуют необязательные аргументы,
atan
функция позволяет опционально указать координату x :(atan y x)
. [10] - В Julia ситуация аналогична Common Lisp: вместо
atan2
, язык имеет однопараметрическую и двухпараметрическую форму дляatan
. [11] Однако у него гораздо больше двух методов, позволяющих проводить агрессивную оптимизацию во время компиляции (см. раздел «Почему бы вам не скомпилировать код Matlab/Python/R/… в Julia?» [12] ). - Для систем, реализующих знаковый ноль , бесконечность или Not a Number (например, IEEE с плавающей запятой ), обычно реализуются разумные расширения, которые могут расширить диапазон создаваемых значений, включив в него − π и −0, когда y = −0. Они также могут возвращать NaN или вызывать исключение при получении аргумента NaN.
- В архитектуры Intel x86 ассемблерном коде :
atan2
известен какFPATAN
(частичный арктангенс с плавающей запятой). [13] Он может иметь дело с бесконечностями, и результаты лежат в замкнутом интервале [−π, π] , напримерatan2(∞, x)
= + π /2 для конечного x . Особенно,FPATAN
определяется, когда оба аргумента равны нулю:atan2(+0, +0)
= +0;atan2(+0, −0)
= + π ;atan2(−0, +0)
= −0;atan2(−0, −0)
знак равно - π .
- Это определение связано с понятием знакового нуля .
- В математических трудах, кроме исходного кода, например, в книгах и статьях, обозначения Arctan [14] и Тан −1 [15] были использованы; это варианты обычного арктана и коричневого с заглавной буквы. −1 . Такое использование согласуется с обозначением комплексного аргумента , например, Atan( y , x ) = Arg( x + i y ) .
- В калькуляторах HP рассматривайте координаты как комплексное число, а затем принимайте
ARG
. Или<< C->R ARG >> 'ATAN2' STO
. - В научных калькуляторах функцию часто можно вычислить как угол, полученный при ( x , y ) преобразовании из прямоугольных координат в полярные координаты .
- Системы, поддерживающие символьную математику, обычно возвращают неопределенное значение для atan2(0, 0) или иным образом сигнализируют о возникновении ненормального состояния.
- Бесплатная математическая библиотека FDLIBM (Свободно распространяемая LIBM), доступная на сайте netlib, имеет исходный код, показывающий, как она реализуется.
atan2
включая обработку различных исключительных значений IEEE. - Для систем без аппаратного умножителя функция atan2 может быть реализована численно надежным способом с помощью метода CORDIC . Таким образом, реализации atan( y ) , вероятно, предпочтут вычислить atan2( y , 1) .
См. также [ править ]
Ссылки [ править ]
- ^ «Аргумент комплексного числа» (PDF) . Институт физики элементарных частиц Санта-Крус. Зима 2011.
- ^ Органик, Эллиот И. (1966). Букварь по Фортрану IV . Аддисон-Уэсли. п. 42.
Некоторые процессоры также предлагают библиотечную функцию ATAN2, функцию двух аргументов (противоположного и соседнего).
- ^ «Вольф Юнг: Мандель, программное обеспечение для сложной динамики» . www.mndynamics.com . Проверено 20 апреля 2018 г.
- ^ «Краткий справочник по направлению ветра» . Лаборатория наблюдения Земли NCAR UCAR.
- ^ Чжан, Тайпин; Стэкхаус, Пол В.; Макферсон, Брэдли; Миковиц, Дж. Коллин (2021). «Формула солнечного азимута, которая делает ненужным подробное рассмотрение без ущерба для математической строгости: математическая установка, применение и расширение формулы, основанной на подсолнечной точке и функции atan2» . Возобновляемая энергия . 172 : 1333–1340. doi : 10.1016/j.renene.2021.03.047 . S2CID 233631040 .
- ^ «Метод Microsoft Excel Atan2» . Майкрософт.
- ^ «LibreOffice Calc ATAN2» . LibreOffice.org.
- ^ «Функции и формулы – Помощь редакторам документации» . support.google.com .
- ^ «Список тригонометрических функций чисел» . Яблоко.
- ^ «CLHS: Функция ASIN, ACOS, ATAN» . Лиспворкс.
- ^ «Математика · Язык Джулии» . docs.julialang.org .
- ^ «Часто задаваемые вопросы · Язык Джулии» . docs.julialang.org .
- ^ IA-32 Руководство разработчика программного обеспечения для архитектуры Intel. Том 2A: Справочник по набору команд, AM, 2004 г.
- ^ Бургер, Вильгельм; Бердж, Марк Дж. (7 июля 2010 г.). Принципы цифровой обработки изображений: фундаментальные методы . Springer Science & Business Media. ISBN 978-1-84800-191-6 . Проверено 20 апреля 2018 г. - через Google Книги.
- ^ Глиссон, Тилдон Х. (18 февраля 2011 г.). Введение в анализ и проектирование цепей . Springer Science & Business Media. ISBN 9789048194438 . Проверено 20 апреля 2018 г. - через Google Книги.
Внешние ссылки [ править ]
- АТАН2 Онлайн калькулятор
- Java 1.6 SE JavaDoc
- atan2 в Everything2
- Решение PicBasic Pro atan2 для PIC18F
- Другие реализации/код для atan2
- «Перинг между двумя точками» . Архивировано из оригинала 18 ноября 2020 года . Проверено 21 февраля 2022 г.
- «Арктан и полярные координаты» . Архивировано из оригинала 18 октября 2018 года . Проверено 21 февраля 2022 г.
- «Что такое «Арккос»?» . Архивировано из оригинала 6 сентября 2017 года . Проверено 21 февраля 2022 г.