Функция впервые появилась в языке программирования Фортран в 1961 году. Изначально она предназначалась для возврата правильного и однозначного значения угла θ при преобразовании из декартовых координат ( x , y ) в полярные координаты ( r , θ ) . Если и , то и
Если x > 0 , желаемая мера угла равна. Однако, когда x < 0 , угол диаметрально противоположен желаемому углу, и необходимо добавить ± π (половина оборота ), чтобы поместить точку в правильный квадрант . [1] Использование функции устраняет эту коррекцию, упрощая код и математические формулы.
Мотивация
График касательной функции от − π до + π с соответствующими знаками y / x . Зеленые стрелки указывают на результаты atan2(−1, −1) и atan2(1, 1).
Обычная функция арктангенса с одним аргументом возвращает только меры угла в интервале, и при ее вызове для нахождения меры угла между осью x и произвольным вектором в декартовой плоскости не существует простого способа указать направление в левой половине. -плоскость (то есть точка с ). Диаметрально противоположные угловые меры имеют один и тот же тангенс, поскольку тангенса самого по себе недостаточно для однозначного определения угла.
Чтобы определить величину угла с помощью функции арктангенса для заданной точки или вектора, математические формулы или компьютерный код должны обрабатывать несколько случаев; по крайней мере, один для положительных значений и один для отрицательных значений, а иногда и дополнительные случаи, когда координата отрицательна или одна координата равна нулю. Нахождение угловых мер и преобразование декартовых координат в полярные широко распространены в научных вычислениях, и этот код является избыточным и подвержен ошибкам.
Чтобы исправить это, в языках программирования была введена функция atan2 , по крайней мере, еще в языке Fortran IV 1960-х годов. [2] Величина atan2( y , x ) — это угол между осью x и лучом, идущим от начала координат до точки ( x , y ) в любом месте декартовой плоскости. Знаки x и y используются для определения квадранта результата и выбора правильной ветви многозначной функции Arctan ( y / x ) .
Функция 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. ( у , Икс ) ≤ π .
С точки зрения стандартной функции арктанга , диапазон которой равен (−π/2, π/2) , ее можно выразить следующим образом, чтобы определить поверхность, которая не имеет разрывов, за исключением полубесконечной линии x<0 y=0:
Компактное выражение с четырьмя перекрывающимися полуплоскостями:
Вариант последней формулы, позволяющий избежать завышенных ошибок округления:
Вывод главного значения аргумента относится к этой цифре.
Примечания:
Это дает результаты в диапазоне (−π, π] . [примечание 2]
Как упоминалось выше, главное значение аргумента atan2( y , x ) может быть связано с arctan( y / x ) посредством тригонометрии. Вывод происходит следующим образом:Если ( Икс , y ) = ( р потому что θ , р грех θ ) , то tan( θ /2) = y / ( р + x ) . Следует, что
Обратите внимание, что √ x 2 + y 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 вдоль выбранных лучей от начала координат, отмеченных единичным кругом. Значения в радианах показаны внутри круга. В диаграмме используется стандартное математическое соглашение, согласно которому углы увеличиваются против часовой стрелки от нуля вдоль луча вправо. Обратите внимание, что порядок аргументов обратный; функция atan2( y , x ) вычисляет угол, соответствующий точке ( x , y ) .
На этом рисунке показаны значения вместе с для . Обе функции являются нечетными и периодическими с периодами и , соответственно, и, таким образом, могут быть легко дополнены к любой области действительных значений . Хорошо видны разветвления -функции at и -функции at . [3]
На двух рисунках ниже показаны 3D-изображения соответственно atan2( y , x ) и arctan(й/Икс) над областью плоскости. Обратите внимание, что для atan2( y , x ) лучи в X / Y -плоскости , исходящие из начала координат, имеют постоянные значения, а для arctan(й/Икс) линии в плоскости X / Y , проходящие через начало координат, имеют постоянные значения. При x > 0 две диаграммы дают одинаковые значения.
Угловая сумма и разность тождественны
Суммы можно объединить в одну операцию согласно следующему тождеству:
...при условии, что .
Доказательство включает рассмотрение двух случаев: одного, где или , и другого, когда и .
Мы рассматриваем только случай, когда или . Для начала сделаем следующие наблюдения:
Чтобы увидеть (4), мы имеем тождество где , следовательно . Кроме того, поскольку для любого положительного действительного значения , то если мы допустим и тогда мы имеем .
Из этих наблюдений имеются следующие эквиваленты:
Следствие : если и являются двумерными векторами, формула разности часто используется на практике для вычисления угла между этими векторами с помощью , поскольку полученные вычисления ведут себя благополучно в диапазоне и, таким образом, могут использоваться без проверок диапазона во многих практических ситуации.
Условные обозначения «восток — против часовой стрелки», «север — часовая стрелка», «юг — часовая стрелка» и т. д.
Функция изначально была разработана для соглашения в чистой математике, которое можно назвать восток-против часовой стрелки . Однако в практических приложениях часто нормой являются соглашения по северной и южной часовой стрелке . Например, в науках об атмосфере направление ветра можно рассчитать, используя функцию с восточным и северным компонентами вектора ветра в качестве аргументов; [4] угол азимута Солнца может быть рассчитан аналогичным образом, используя в качестве аргументов восточную и северную компоненты солнечного вектора. Направление ветра обычно определяется по направлению на север по часовой стрелке, а угол азимута Солнца широко использует соглашения как по северной, так и по южной часовой стрелке. [5] Эти различные соглашения можно реализовать, поменяв местами позиции и изменив знаки x- и y-аргументов следующим образом:
(Восточная конвенция против часовой стрелки)
(Конвенция по северной часовой стрелке)
. (Конвенция по южной часовой стрелке)
Например, пусть и , тогда формат восточного направления против часовой стрелки дает , формат северной часовой стрелки дает , а формат южного направления дает .
Изменение знака аргументов x и/или y и/или замена их позиций может создать 8 возможных вариантов функции, и они, что интересно, соответствуют 8 возможным определениям угла, а именно, по часовой стрелке или против часовой стрелки, начиная с каждого из 4 основных направления : север, восток, юг и запад.
Реализации функции на распространенных компьютерных языках.
Реализация функции отличается от одного компьютерного языка к другому:
В системе Mathematica используется форма , в которой форма с одним параметром задает нормальный арктангенс. Система Mathematica классифицирует выражение как неопределенное.ArcTan[x, y]ArcTan[0, 0]
На большинстве графических калькуляторов TI (за исключением TI-85 и TI-86 ) эквивалентная функция называется R►Pθ и имеет аргументы .
В TI-85 вызывается функция argangle(x,y) , и хотя кажется, что она принимает два аргумента, на самом деле у нее есть только один комплексный аргумент, который обозначается парой чисел: x + i y = ( x , y ) .
Конвенцию используют:
Функция C atan2и большинство других компьютерных реализаций предназначены для уменьшения усилий по преобразованию декартовых координат в полярные и поэтому всегда определяют atan2(0, 0). В реализациях без знакового нуля или при наличии положительных нулевых аргументов он обычно определяется как 0. Он всегда будет возвращать значение в диапазоне [-π, π] , а не вызывать ошибку или возвращать NaN (не число).
В Common Lisp , где существуют необязательные аргументы, atanфункция позволяет опционально указать координату x : . [11](atan yx)
В Julia ситуация аналогична Common Lisp: вместо atan2, в языке есть однопараметрическая и двухпараметрическая форма для atan. [12] Однако в нем имеется гораздо больше двух методов, позволяющих проводить агрессивную оптимизацию во время компиляции (см. раздел «Почему бы вам не скомпилировать код Matlab/Python/R/… в Julia?» [13] ).
Для систем, реализующих знаковый нуль , бесконечность или Not a Number (например, IEEE с плавающей запятой ), обычно реализуются разумные расширения, которые могут расширить диапазон создаваемых значений, включив в него − π и −0, когда y = −0. Они также могут возвращать NaN или вызывать исключение при получении аргумента NaN.
В ассемблерном коде архитектуры Intel x86 она известна как инструкция (частичный арктангенс с плавающей запятой). [14] Он может иметь дело с бесконечностями, и результаты лежат в замкнутом интервале [−π, π] , например = + π /2 для конечного x . В частности, определяется, когда оба аргумента равны нулю:atan2FPATANatan2(∞, x)FPATAN
В математических трудах, помимо исходного кода, например, в книгах и статьях, использовались обозначения Arctan [15] и Tan −1 [16] ; это написанные с заглавной буквы варианты обычного arctan и tan −1 . Такое использование согласуется с обозначением комплексного аргумента , например, Atan( y , x ) = Arg( x + i y ) .
В калькуляторах HP рассматривайте координаты как комплексное число, а затем принимайте расширение ARG. Или << C->R ARG >> 'ATAN2' STO.
Системы, поддерживающие символьную математику, обычно возвращают неопределенное значение для 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 .
^ «Список тригонометрических функций чисел». Яблоко.
^ «ANSI SQL: стандарт 2008» . Терадата. Архивировано из оригинала 20 августа 2015 г.
^ «CLHS: Функция ASIN, ACOS, ATAN» . Лиспворкс.
^ «Математика · Язык Джулии» . docs.julialang.org .
^ «Часто задаваемые вопросы · Язык Джулии» . docs.julialang.org .
^ IA-32 Руководство разработчика программного обеспечения для архитектуры Intel. Том 2A: Справочник по набору команд, AM, 2004 г.
^ Бургер, Вильгельм; Бердж, Марк Дж. (7 июля 2010 г.). Принципы цифровой обработки изображений: фундаментальные методы. Springer Science & Business Media. ISBN978-1-84800-191-6. Проверено 20 апреля 2018 г. - через Google Книги.
↑ Глиссон, Тилдон Х. (18 февраля 2011 г.). Введение в анализ и проектирование цепей. Springer Science & Business Media. ISBN9789048194438. Проверено 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 г.
Примечания
^ Предполагая определения и для любого
^ Можно применить периодичность результата для сопоставления с другим желаемым диапазоном, например, сопоставления с [0, 2π) , добавив 2π к отрицательным результатам.