アタン2

atan2( y , x )は、原点から点( x , y )への光線と正のx軸との間の角度θを返します (範囲は(− π , π ]です) 。
グラフのオーバー

コンピュータ数学において関数 atan2は2つの引数を持つ 逆正接です。定義により、正の原点から直交平面上の点への直線との間の角度ラジアン単位、 )です。同様に、は複素数の引数(位相または角度とも呼ばれますです(前述の関数の引数と複素数の引数は混同しないでください)。

この関数は1961年にプログラミング言語Fortranで初めて登場しました。元々は直交座標系から極座標系への変換において、角度⁠ ⁠ の正確で明確な値を返すことを目的としていましおよび場合および

の場合、目的の角度の測定値は、しかし、x < 0の場合、角度は目的の角度と正反対であり、点を正しい象限に配置するには (半回転) を追加する必要があります[1]関数を使用すると、この補正がなくなり、コードと数式が簡素化されます。

モチベーション

−πからまでの正接関数のグラフ。対応するy / xの符号も示している。緑の矢印はatan2(−1, −1)atan2(1, 1)の結果を示している

通常の単一引数アークタンジェント関数は、区間内の角度の測定値のみを返します。そして、原点から直交平面上の任意の点への方向角を求めるためにこの関数を呼び出すと、点が左半平面⁠内にある場合、誤った結果が返されます。正反対の角度の測定値は同じ正接を持ちます。なぜなら

アークタンジェント関数を用いて点⁠ から原点への方向角を完全に決定するには、数式またはコンピュータコードで複数のケースを処理する必要があります。少なくともの正の値と負の値の場合がそれぞれ1つずつ、そして場合によってはが負の値、または座標の1つが0の場合も処理する必要があります。角度の測定値を求めたり、直交座標を極座標に変換したりすることは科学計算では一般的ですが、このコードは冗長でエラーが発生しやすいものです。

プログラマの手間を省くため、コンピュータプログラミング言語は、少なくとも1960年代のFortran IV言語の頃からatan2関数を導入しました。 [2] 、原点から直交平面上の任意の点⁠への直線と軸との間の角度です。 符号は、結果の象限を決定し、多価関数の正しい分岐を選択するために使用されます

atan2関数は、ある点から別の点への方向を調べたり、回転行列をオイラー角に変換したりするなどユークリッド ベクトルが関係する多くのアプリケーションで役立ちます

atan2関数現在、他の多くのプログラミング言語に組み込まれており、科学や工学の分野における数式でもよく使用されています。

引数の順序

1961 年、Fortran は引数順序⁠を持つatan2関数を導入したため、複素数の引数(位相角) は、これは、の正の値に対してとなるように書かれた分数の左から右への順序に従います。ただし、これは複素数の従来の成分順序、または座標としての順序とは逆です。「定義と計算」のセクションを参照してください。

他のプログラミング言語(§ 一般的なコンピュータ言語における関数の実現を参照)では、逆の順序が採用されています。例えば、Microsoft ExcelではOpenOffice CalcMathematicaでは引数が1つの場合、デフォルトで引数が1つの逆正接関数が使用されます。

定義と計算

関数atan2は複素数 偏角を計算します。これは複素対数の主値の虚数部でもあります。つまり、

の任意の整数倍(原点の周りの完全な回転に相当)を追加すると、同じ複素数の別の引数が得られますが、主引数は区間 の一意の代表角度として定義されます。

標準的な逆正接関数(その像は⁠ ⁠ )では、atan2区分的に次のように表すことができます

半角度の正接は、座標xy、および半径rで計算できます

接線の代わりに、半接線⁠ ⁠ を角度の表現として使用すると便利です。これは、角度が一意の半接線を持つためです。

正接半角の公式を参照してください。分母にを含む式は、および⁠の場合に使用してください。これは、 の計算で有意性が失われる可能性を避けるためです。atan2関数利用できない場合は、半正接の逆正接の2倍として計算できます。つまり、

デリバティブ

関数atan2は2変数の関数であるため、2つの偏微分を持ちます。これらの微分が存在する点において、atan2は定数を除いてarctan( y / x )に等しくなります。したがって、

これら2つの偏微分は勾配の座標です

関数atan2を角度関数θ ( x , y )=atan2( y , x ) (定数までしか定義されない)として非公式に表すと、全微分について次の式が得られます。

関数atan2は負のx軸に沿って不連続であり、角度を連続的に定義できないという事実を反映しています。一方、この導関数は原点を除いて連続的に定義されており、角度の微小な(そして局所的な)変化は原点を除くあらゆる場所で定義できるという事実を反映しています。この導関数をパスに沿って積分すると、パス全体の角度の変化が得られ、閉ループに沿って積分すると、回転数が得られます。

微分幾何学の言語では、この微分は1-形式であり、閉じている(その微分は0)が、正確ではない(0-形式、すなわち関数の微分ではない)ため、実際には穴あき平面の第一ド・ラーム・コホモロジーを生成する。これはそのような形式の最も基本的な例であり、微分幾何学において基本的なものである。

atan2の偏導関数には三角関数が含まれていないため、三角関数の評価にコストがかかる多くのアプリケーション (組み込みシステムなど) で特に役立ちます。

イラスト

選択された光線のatan2

この図は、単位円にラベルを付けられた原点からの選択された直線に沿った atan2 の値を示しています。値はラジアン単位で円内に示されています。この図では、角度は直線に沿って時計回りに0から右に向かって増加するという標準的な数学的慣習に従っています。引数の順序が逆になっていることに注意してください。関数atan2( y , x )は、点( x , y )に対応する角度を計算します

arctan関数とatan2関数の比較

この図は、 における と値を示しています。両関数は奇関数であり、それぞれ周期と を持つ周期関数であるため、 の実数値の任意の領域に容易に追加できます。における -関数分岐、およびにおける -関数の分岐が明確に確認できます[3]

下の2つの図は、それぞれatan2( y , x )arctan( y/× ) を平面の領域に投影します。atan2 ( y , x )の場合、原点からX / Y平面に放射される光線は一定値を持ちますが、 arctan( y/× X / Y平面上の原点を通る直線定数値を持ちます。x > 0の場合、2つの図は同じ値を示します。

角度の和と差の等式

で計算される複数の角度の和または差は、それらを複素数として合成することによっても計算できます。2つの座標ペア⁠が与えられた場合、それらを複素数として扱い、それらを掛け合わせると、正の軸からの角度が合成(および長さの乗算)されます。結果の角度が ⁠ にある限り、結果の角度は1回の ⁠ 演算で求めることができます

2つ以上の座標ペアについても同様です。合成角度が負の軸と交差する場合(つまり、範囲を超える場合)、交差回数を数え、最終結果にの適切な整数倍を加算することで補正できます。

この差分式は、結果として得られる角度が常に⁠ ⁠ の範囲内にあるため、実際には 2 つの平面ベクトル間の角度を計算するために頻繁に使用されます

東反時計回り、北時計回り、南時計回りなどの慣例。

この関数はもともと、純粋数学における東反時計回りと呼ばれる慣例のために設計されたものです。しかしながら、実際の応用では、北時計回り南時計回りの慣例が標準であることが多いです。たとえば大気科学では、風向は風ベクトルの東と北の成分を引数とする関数を使用して計算できます。 [4]太陽の方位角は、太陽ベクトルの東と北の成分を引数として同様に計算できます。風向は通常、北時計回りの意味で定義され、太陽の方位角では北時計回りと南時計回りの両方の慣例が広く使用されています。[5]これらの異なる慣例は、次のようにx引数とy引数の位置を交換して符号を変更することで実現できます。

  • (東反時計回りの慣例)
  • (北時計回りの慣例)
  • (南時計回りの慣例)

たとえば、 および とする、東反時計回りの形式では、北時計回りの形式では、南時計回りの形式では となります

x 引数および/または y 引数の符号を変更したり、それらの位置を入れ替えたりすると、関数の 8 つのバリエーションを作成できます。興味深いことに、これらは角度の 8 つの定義、つまり、北、東、南、西の 4 つの基本方向のそれぞれから時計回りまたは反時計回りに対応します。

一般的なコンピュータ言語における関数の実現

関数の実現方法はコンピュータ言語によって異なります。

  • Microsoft Excel[6] 、 OpenOffice.org CalcLibreOffice Calc[7] 、 Google Spreadsheets[8]iWork Numbers [9]では2引数アークタンジェント関数の2つの引数は標準的な順序で存在します(上記の説明で使用した規則とは逆の順序です)。
  • Mathematicaでは、 1つのパラメータを持つ形式が通常の逆正接を与える場合に使用されます。Mathematica はこれを不定式として分類します。ArcTan[x,y]ArcTan[0,0]
  • ほとんどの TI グラフ電卓 ( TI-85TI-86を除く) では、同等の関数はR►Pθと呼ばれ、引数 を持ちます
  • TI-85 ではarg関数が呼び出されangle(x,y)、 2 つの引数を取るように見えますが、実際には 1 つの複素引数しかなく、これは 2 つの数値x + iy = ( x , y )で表されます。

この規則は以下によって使用されます:

  • C関数atan2、および他のほとんどのコンピュータ実装は、直交座標から極座標への変換の手間を軽減するように設計されているため、常に が定義されています。符号付きゼロatan2(0, 0)のない実装、または正のゼロ引数が与えられた場合、通常は 0 として定義されます。エラーが発生したりNaN (Not a Number) が返されたりするのではなく、常に[−π, π]の範囲の値を返します。
  • Common Lispではオプションの引数が存在するため、関数はオプションでx座標atanを与えることができます[10](atan y x)
  • Juliaでは、状況はCommon Lispに似ています。 の代わりにatan2、言語には 1パラメータ形式と 2パラメータ形式がありますatan[11]しかし、コンパイル時に積極的な最適化を可能にするために、2つより多くのメソッドがあります。[12]
  • Mathcadは引数順序を使用しますatan2(x, y)atan2(0, 0)は未定義です。[13]
  • 符号付きゼロ無限大、または非数(例えばIEEE浮動小数点)を実装するシステムでは、 y = −0のときに生成される値の範囲を−πおよび−0まで拡張する適切な拡張を実装するのが一般的です。これらの拡張は、NaNを返したり、NaN引数が与えられた場合に例外を発生させたりすることもあります。
  • Intel x86アーキテクチャの アセンブラコードでは、は(浮動小数点部分逆正接)命令atan2として知られています。 [14]この命令は無限大を扱うことができ、結果は閉区間[−π, π]内にあります。例えば、有限のxに対して= + π /2となります。特に、両方の引数がゼロの場合、は次のように定義されます。FPATANatan2(∞, x)FPATAN
    atan2(+0, +0)= +0;
    atan2(+0, −0)= + π ;
    atan2(−0, +0)= −0;
    atan2(−0, −0)= − π
この定義は、符号付きゼロの概念に関連しています
  • ソースコード以外の数学的な記述、例えば書籍や論文などでは、Arctan [15]Tan −1 [16]といった表記が用いられてきました。これらは通常のarctan や tan −1を大文字で表記したものです。この用法は複素引数表記法と一致しており、 Atan( y , x ) = Arg( x + iy )となります
  • HP電卓では、座​​標を複素数として扱い、 または を取りますARG<< C->R ARG >> 'ATAN2' STO
  • 科学計算用電卓では、関数は多くの場合、( xy )を直交座標から極座標変換したときに与えられる角度として計算されます
  • 記号数学をサポートするシステムは通常、 atan2(0, 0)に対して未定義の値を返すか、異常な状態が発生したことを通知します。
  • netlibから入手できる無料の数学ライブラリ FDLIBM (Freely Distributable LIBM) には、atan2さまざまな IEEE 例外値の処理を含め、の実装方法を示すソース コードがあります。
  • ハードウェア乗算器を持たないシステムでは、関数atan2はCORDIC法によって数値的に信頼性の高い方法で実装できます。したがって、atan( y )の実装では、おそらくatan2( y , 1)を計算することが選択されるでしょう

参照

参考文献

  1. ^ 「複素数の偏角」(PDF)サンタクルーズ素粒子物理学研究所。2011年冬。
  2. ^ Organick, Elliott I. (1966). A FORTRAN IV Primer . Addison-Wesley. p. 42.一部のプロセッサでは、2つの引数(反対と隣接)を取るATAN2というライブラリ関数も提供されています。
  3. ^ 「Wolf Jung: Mandel、複雑なダイナミクスのためのソフトウェア」www.mndynamics.com . 2018年4月20日閲覧
  4. ^ 「風向クイックリファレンス」NCAR UCAR地球観測研究所。
  5. ^ Zhang, Taiping; Stackhouse, Paul W.; MacPherson, Bradley; Mikovitz, J. Colleen (2021). 「数学的厳密さを損なうことなく状況判断を不要にする太陽方位角公式:太陽直下点とatan2関数に基づく公式の数学的設定、適用、拡張」. Renewable Energy . 172 : 1333– 1340. Bibcode :2021REne..172.1333Z. doi : 10.1016/j.renene.2021.03.047 . S2CID  233631040.
  6. ^ 「Microsoft Excel Atan2メソッド」。Microsoft。2014年6月14日。
  7. ^ 「LibreOffice Calc ATAN2」. Libreoffice.org.
  8. ^ 「関数と数式 – ドキュメントエディタ ヘルプ」。support.google.com
  9. ^ 「Numbersの三角関数リスト」Apple.
  10. ^ 「CLHS: 関数 ASIN、ACOS、ATAN」LispWorks。
  11. ^ 「数学・Julia言語」. docs.julialang.org .
  12. ^ 「Julia言語に関するよくある質問」。docs.julialang.org
  13. ^ 「Mathcadヘルプ - 極角」。PTC。
  14. ^ IA-32 Intel アーキテクチャ・ソフトウェア開発者マニュアル。第2A巻:命令セットリファレンス、AM、2004年。
  15. ^ バーガー、ウィルヘルム、バーガー、マーク・J.(2010年7月7日)デジタル画像処理の原理:基礎技術、シュプリンガー・サイエンス&ビジネス・メディア、ISBN 978-1-84800-191-62018年4月20日閲覧– Googleブックス経由。
  16. ^ グリッソン、ティルドン H. (2011年2月18日). 回路解析と設計入門. シュプリンガー・サイエンス&ビジネス・メディア. ISBN 97890481944382018年4月20日閲覧– Googleブックス経由。
  • ATAN2オンライン計算機
  • Java 1.6 SE JavaDoc
  • Everything2のatan2
  • PIC18F用PicBasic Proソリューションatan2
atan2のその他の実装/コード
  • 「2点間の方位」。2020年11月18日時点のオリジナルよりアーカイブ2022年2月21日閲覧。
  • 「アークタンと極座標」。2018年10月18日時点のオリジナルよりアーカイブ2022年2月21日閲覧。
  • 「『Arccos』って何?」2017年9月6日時点のオリジナルよりアーカイブ。 2022年2月21日閲覧

注記


Retrieved from "https://en.wikipedia.org/w/index.php?title=Atan2&oldid=1320934154"