Функция впервые появилась в языке программирования Fortran в 1961 году. Первоначально она предназначалась для возврата правильного и однозначного значения угла при преобразовании из декартовых координат в полярные координаты . Если и , то и
Если , искомая мера угла равна Однако, когда x < 0 , угол диаметрально противоположен искомому углу, и (половина оборота ) должна быть добавлена, чтобы поместить точку в правильный квадрант . [1] Использование функции позволяет отказаться от этой коррекции, упрощая код и математические формулы.
Мотивация
Обычная одноаргументная функция арктангенса возвращает только угловые меры в интервале , и при вызове ее для нахождения угла направления от начала координат до произвольной точки в декартовой плоскости она даст неверные результаты, когда точка находится в левой полуплоскости . Диаметрально противоположные угловые меры имеют одинаковый тангенс, потому что
Чтобы полностью определить угол направления от начала координат, заданного точкой с помощью функции арктангенса, математические формулы или компьютерный код должны обрабатывать несколько случаев; по крайней мере один для положительных значений и один для отрицательных значений , а иногда и дополнительные случаи, когда отрицательно или одна координата равна нулю. Нахождение угловых мер и преобразование декартовых координат в полярные являются обычными в научных вычислениях, и этот код избыточный и подвержен ошибкам.
Чтобы избавить программистов от хлопот, языки программирования компьютеров ввели функцию atan2 , по крайней мере, еще в языке Fortran IV 1960-х годов. [2] Величина представляет собой угол между осью и лучом из начала координат в точку в любой точке декартовой плоскости. Знаки x и используются для определения квадранта результата и выбора правильной ветви многозначной функции .
Функция atan2 полезна во многих приложениях, связанных с евклидовыми векторами , например, для нахождения направления от одной точки к другой или преобразования матрицы вращения в углы Эйлера .
Функция atan2 теперь включена во многие другие языки программирования, а также часто встречается в математических формулах в науке и технике.
Порядок аргументации
В 1961 году в Фортране была введена функция atan2 с порядком аргументов таким образом, что аргумент (фазовый угол) комплексного числа равен Это соответствует порядку дроби слева направо, записанной так, что для положительных значений Однако это противоположно обычному порядку компонентов для комплексных чисел или как координат См. раздел Определение и вычисления.
Некоторые другие языки программирования (см. § Реализации функции в распространенных компьютерных языках) выбрали противоположный порядок. Например, Microsoft Excel использует OpenOffice, Calc использует , а Mathematica использует по умолчанию арктангенс с одним аргументом, если вызывается с одним аргументом.
Определение и расчет
Функция atan2 вычисляет главный аргумент комплексного числа , который также является мнимой частью главного значения комплексного логарифма . То есть,
Добавление любого целого кратного (соответствующего полному обороту вокруг начала координат) дает еще один аргумент того же комплексного числа, но главный аргумент определяется как уникальный представительный угол в интервале .
В терминах стандартной функции арктангенса, изображением которой является , atan2 можно выразить кусочно :
Вместо касательной может быть удобно использовать полукасательную как представление угла, отчасти потому, что угол имеет уникальную полукасательную,
(См. формулу тангенса половинного угла .) Выражение с в знаменателе следует использовать, когда и для возможной потери значимости при вычислении . Когда функция atan2 недоступна, ее можно вычислить как удвоенный арктангенс половинного тангенса .
Производный
Так как функция atan2 является функцией двух переменных, она имеет две частные производные . В точках, где эти производные существуют, atan2 , за исключением константы, равна arctan( y / x ) . Следовательно, для x > 0 или y ≠ 0 ,
Таким образом, градиент atan2 определяется выражением
Неформальное представление функции atan2 как угловой функции θ ( x , y ) = atan2( y , x ) (которая определена только с точностью до константы) дает следующую формулу для полного дифференциала :
В то время как функция atan2 разрывна вдоль отрицательной оси x , отражая тот факт, что угол не может быть определен непрерывно, эта производная непрерывно определена, за исключением начала координат, отражая тот факт, что бесконечно малые (и действительно локальные) изменения угла могут быть определены везде, кроме начала координат. Интегрирование этой производной вдоль пути дает полное изменение угла по пути, а интегрирование по замкнутому контуру дает число витков .
Частные производные atan2 не содержат тригонометрических функций, что делает его особенно полезным во многих приложениях (например, встроенных системах), где оценка тригонометрических функций может быть дорогостоящей.
Иллюстрации
На этом рисунке показаны значения atan2 вдоль выбранных лучей из начала координат, обозначенного на единичной окружности. Значения в радианах показаны внутри окружности. На диаграмме используется стандартное математическое соглашение, согласно которому углы увеличиваются против часовой стрелки от нуля вдоль луча вправо. Обратите внимание, что порядок аргументов обратный; функция atan2( y , x ) вычисляет угол, соответствующий точке ( x , y ) .
На этом рисунке показаны значения вместе с для . Обе функции нечетные и периодические с периодами и , соответственно, и, таким образом, могут быть легко дополнены до любой области действительных значений . Можно ясно видеть разрезы ветвей -функции при , и -функции при . [3]
На двух рисунках ниже показаны трехмерные виды atan2( y , x ) и arctan( соответственно.у/х ) по области плоскости. Обратите внимание, что дляatan2 ( y , x ) лучи в плоскости X / Y , исходящие из начала координат, имеют постоянные значения, но для arctan( у/х ) линии в плоскости X / Y , проходящие через начало координат, имеют постоянные значения. При x > 0 две диаграммы дают одинаковые значения.
Сумма углов и разность тождественны
Сумма или разность нескольких углов, которые должны быть вычислены с помощью , может быть альтернативно вычислена путем составления их как комплексных чисел . При наличии двух пар координат и их углы от положительной оси будут составлены (и длины умножены), если их рассматривать как комплексные числа, а затем умножить друг на друга, . Результирующий угол можно найти с помощью одной операции, при условии, что результирующий угол лежит в :
и аналогично для более чем двух пар координат. Если составленный угол пересекает отрицательную -ось (т.е. выходит за пределы диапазона ), то пересечения можно подсчитать и добавить соответствующее целое кратное к конечному результату, чтобы исправить его.
Эта разностная формула часто используется на практике для вычисления угла между двумя плоскими векторами , поскольку результирующий угол всегда находится в диапазоне .
Соглашения «Восток — против часовой стрелки», «Север — по часовой стрелке», «Юг — по часовой стрелке» и т. д.
Функция была первоначально разработана для соглашения в чистой математике, которое можно назвать восток-против часовой стрелки . Однако в практических приложениях соглашения север-по часовой стрелке и юг-по часовой стрелке часто являются нормой. Например, в атмосферных науках направление ветра можно вычислить с помощью функции с восточной и северной компонентами вектора ветра в качестве ее аргументов; [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 : . [10](atan yx)
В Julia ситуация похожа на Common Lisp: вместо atan2, в языке есть однопараметрическая и двухпараметрическая формы для atan. [11] Однако в нем гораздо больше, чем два метода, что позволяет проводить агрессивную оптимизацию во время компиляции (см. раздел «Почему вы не компилируете код Matlab/Python/R/… в Julia?» [12] ).
Для систем, реализующих знаковый ноль , бесконечности или Not a Number (например, IEEE с плавающей точкой ), обычно реализуют разумные расширения, которые могут расширить диапазон создаваемых значений, включив − π и −0 при y = −0. Они также могут возвращать NaN или вызывать исключение при указании аргумента NaN.
В коде ассемблера архитектуры Intel x86 , известна как инструкция (частичный арктангенс с плавающей точкой). [13] Она может работать с бесконечностями, а результаты лежат в замкнутом интервале [−π, π] , например = + π /2 для конечного x . В частности, определена, когда оба аргумента равны нулю:atan2FPATANatan2(∞, x)FPATAN
В математических работах, отличных от исходного кода, например, в книгах и статьях, использовались обозначения Arctan [14] и Tan −1 [15] ; это заглавные варианты обычных arctan и tan −1 . Такое использование согласуется с обозначением комплексного аргумента , таким образом, что Atan( y , x ) = Arg( x + i y ) .
На калькуляторах HP обрабатывайте координаты как комплексное число, а затем берите ARG. Или << C->R ARG >> 'ATAN2' STO.
На научных калькуляторах функцию часто можно вычислить как угол, полученный при преобразовании ( x , y ) из прямоугольных координат в полярные .
Системы, поддерживающие символьную математику, обычно возвращают неопределенное значение для atan2(0, 0) или иным образом сигнализируют о возникновении ненормального состояния.
Бесплатная математическая библиотека FDLIBM (Freely Distributable LIBM), доступная на сайте netlib, содержит исходный код, демонстрирующий ее реализацию atan2, включая обработку различных исключительных значений IEEE.
Для систем без аппаратного умножителя функция atan2 может быть реализована численно надежным способом с помощью метода CORDIC . Таким образом, реализации atan( y ) вероятно выберут вычисление atan2( y , 1) .
^ "Аргумент комплексного числа" (PDF) . Институт физики элементарных частиц Санта-Крус. Зима 2011 г.
^ Organick, Elliott I. (1966). A FORTRAN IV Primer . Addison-Wesley. стр. 42. Некоторые процессоры также предлагают библиотечную функцию ATAN2, функцию двух аргументов (противоположного и смежного).
^ "Вольф Юнг: Мандель, программное обеспечение для комплексной динамики". www.mndynamics.com . Получено 20 апреля 2018 г. .
^ Чжан, Тайпин; Стэкхаус, Пол У.; Макферсон, Брэдли; Миковиц, Дж. Коллин (2021). «Формула солнечного азимута, которая делает ненужной косвенную трактовку, не ставя под угрозу математическую строгость: математическая установка, применение и расширение формулы, основанной на подсолнечной точке и функции atan2». Возобновляемая энергия . 172 : 1333–1340. Bibcode : 2021REne..172.1333Z. doi : 10.1016/j.renene.2021.03.047 . S2CID 233631040.
^ "Метод Microsoft Excel Atan2". Microsoft. 14 июня 2014 г.
^ "LibreOffice Calc ATAN2". Libreoffice.org.
^ «Функции и формулы – Справка редакторов документов». support.google.com .
^ «Список тригонометрических функций чисел». Apple.
^ "CLHS: Функция ASIN, ACOS, ATAN". LispWorks.
^ "Математика · Язык Джулии". docs.julialang.org .
^ "Часто задаваемые вопросы · Язык Julia". docs.julialang.org .
^ Руководство разработчика программного обеспечения для архитектуры Intel IA-32. Том 2A: Справочник по набору инструкций, AM, 2004.
^ Бургер, Вильгельм; Бердж, Марк Дж. (7 июля 2010 г.). Принципы цифровой обработки изображений: основные методы. Springer Science & Business Media. ISBN978-1-84800-191-6. Получено 20 апреля 2018 г. – через Google Books.
^ Глиссон, Тилдон Х. (18 февраля 2011 г.). Введение в анализ и проектирование цепей. Springer Science & Business Media. ISBN9789048194438. Получено 20 апреля 2018 г. – через Google Books.
Внешние ссылки
ATAN2 Онлайн калькулятор
Java 1.6 SE JavaDoc
atan2 в Everything2
Решение PicBasic Pro atan2 для PIC18F
Другие реализации/код для atan2
"Пелендж между двумя точками". Архивировано из оригинала 18 ноября 2020 г. Получено 21 февраля 2022 г.
"Arctan and Polar Coordinates". Архивировано из оригинала 18 октября 2018 г. Получено 21 февраля 2022 г.
«Что такое „Arccos“?». Архивировано из оригинала 6 сентября 2017 г. Получено 21 февраля 2022 г.