atan2 – Wikipedia

before-content-x4

atan2 (y, x) gibt den Winkel zurück θ zwischen dem Strahl auf den Punkt ((x, y) und das Positive x Achse, beschränkt auf (-π, π]].

Grafik von

Die Funktion

atan2((y,x){ displaystyle operatorname {atan2} (y, x)}

oder

arctan2((y,x){ displaystyle operatorname {arctan2} (y, x)}

(von “2-Argument-Arkustangens”) ist definiert als der Winkel in der euklidischen Ebene im Bogenmaß zwischen dem Positiv x Achse und der Strahl zum Punkt ((x, y) ≠ (0, 0).

Die Funktion

atan2((y,x){ displaystyle operatorname {atan2} (y, x)}

erschien erstmals in der Programmiersprache Fortran (in der IBM-Implementierung FORTRAN-IV im Jahr 1961). Es war ursprünglich beabsichtigt, einen korrekten und eindeutigen Wert für den Winkel zurückzugeben θ beim Konvertieren von kartesischen Koordinaten ((x, y) zu Polarkoordinaten ((r, θ).

Gleichermaßen

atan2((y,x){ displaystyle operatorname {atan2} (y, x)}

ist das Argument (auch genannt Phase oder Winkel) der komplexen Zahl

x+ichy.{ displaystyle x + iy.}

atan2((y,x){ displaystyle operatorname {atan2} (y, x)}

gibt einen einzelnen Wert zurück θ so dass – –π < θπ und für einige r > 0,

Während es wahr ist, dass

r=x2+y2{ displaystyle r = { sqrt {x ^ {2} + y ^ {2}}}}

gilt nicht immer folgende Äquivalenz:

Dies gilt nur wenn x > 0. Wann x <0zeigt der Winkel, der aus dem obigen Ausdruck hervorgeht, in die entgegengesetzte Richtung des korrekten Winkels und einen Wert von π (oder 180 °) muss entweder addiert oder subtrahiert werden θ um den kartesischen Punkt zu setzen ((x, y) in den richtigen Quadranten der euklidischen Ebene.[1] Dies erfordert die Kenntnis der Zeichen von x und y separat, welche Informationen verloren gehen, wenn y wird geteilt durch x.

Da jedes ganzzahlige Vielfache von 2π kann dem Winkel hinzugefügt werden θ ohne sich zu ändern x oder yDies impliziert einen mehrdeutigen Wert für den zurückgegebenen Wert, den Hauptwert des Winkels, in dem Intervall (-π, π]] ist zurück gekommen. θ ist signiert, wobei die Winkel gegen den Uhrzeigersinn positiv und der Uhrzeigersinn negativ sind. Speziell,

atan2((y,x){ displaystyle operatorname {atan2} (y, x)}

ist in der Pause [0, π] wann y ≥ 0, und in (-π, 0) wann y <0.

Geschichte und Motivation[edit]

Graph der Tangentenfunktion von –π zu +π mit den entsprechenden Zeichen von y/.x. Die grünen Pfeile zeigen auf die Ergebnisse von atan2 (−1, −1) und atan2 (1, 1).

Das atan2 Die Funktion wurde zuerst in Computerprogrammiersprachen eingeführt, ist aber jetzt auch in anderen Bereichen der Wissenschaft und Technik üblich. Es reicht mindestens bis zur Programmiersprache FORTRAN zurück[2]

und ist derzeit in vielen modernen Programmiersprachen zu finden. Zu diesen Sprachen gehören: die math.h-Standardbibliothek von C, die Java Math-Bibliothek, System.Math von .NET (verwendbar von C #, VB.NET usw.), das Python-Mathematikmodul, das Ruby Math-Modul und das Go-Mathematikpaket[3] und anderswo. Darüber hinaus enthalten viele Skriptsprachen wie Perl den C-Stil atan2(y, x) Funktion.

Die Arktangensfunktion mit einem Argument kann nicht zwischen diametral entgegengesetzten Richtungen unterscheiden. Zum Beispiel der Winkel gegen den Uhrzeigersinn von der x Achse zum Vektor (1, 1), berechnet in üblicher Weise als Arctan (1/1)ist π / 4 (Bogenmaß) oder 45 °. Der Winkel zwischen dem x Achse und der Vektor (−1, −1) scheint nach der gleichen Methode zu sein Arctan (-1 / -1), nochmal π / 4, obwohl man die Antworten erwarten könnte −3π / 4 (–135 °) oder 5π / 4 (225 °). Außerdem wird versucht, den Winkel zwischen dem x Achse und die Vektoren (0, y), y ≠ 0 erfordert eine Bewertung von arctan (y/ 0), was bei Division durch Null fehlschlägt.

Das atan2 Die Funktion berechnet aus zwei Variablen einen eindeutigen Bogen-Tangentenwert y und x, wobei die Vorzeichen beider Argumente verwendet werden, um den Quadranten des Ergebnisses zu bestimmen, wodurch der gewünschte Zweig der Bogen-Tangente von ausgewählt wird y/.x, z.B, atan2 (1, 1) = π / 4 und atan2 (−1, −1) = −3π / 4. Ähnlich z. atan2 (1, 0) = π / 2.

Wenn Berechnungen manuell durchgeführt werden, können die erforderlichen Quadrantenkorrekturen und die Ausnahmebehandlung durch Inspektion durchgeführt werden. Es ist jedoch sinnvoller, eine einzige Funktion zu haben, die immer ein eindeutig korrektes Ergebnis liefert. Das atan2 Die Funktion ist in vielen Anwendungen nützlich, die Vektoren im euklidischen Raum betreffen, z. B. beim Ermitteln der Richtung von einem Punkt zum anderen. Eine Hauptanwendung sind Computergrafikrotationen zum Konvertieren von Rotationsmatrixdarstellungen in Eulerwinkel.

Definition und Berechnung[edit]

Die Funktion atan2 berechnet den Hauptwert der Argumentfunktion, die auf die komplexe Zahl angewendet wird x + yich. Das ist, atan2 (y, x) = Pr arg (x + yi) = Arg (x + yich). Das Argument könnte durch ein beliebiges Vielfaches von geändert werden (entsprechend einer vollständigen Drehung um den Ursprung) ohne den Winkel zu verändern, sondern zu definieren atan2 eindeutig verwendet man den Hauptwert im Bereich

((– –π,π]]{ displaystyle (- pi, pi]}

, das ist, – –π y, x) ≤ π.

In Bezug auf den Standard Arctan Funktion, deren Reichweite ist (−π / 2, π / 2)kann wie folgt ausgedrückt werden:

Ein kompakter Ausdruck mit vier überlappenden Halbebenen ist

Die Iverson-Klammer-Notation ermöglicht einen noch kompakteren Ausdruck:

Formel ohne offensichtliches bedingtes Konstrukt:

Der folgende Ausdruck, der aus der Tangentenhalbwinkelformel abgeleitet ist, kann ebenfalls zum Definieren verwendet werden atan2::

Dieser Ausdruck ist möglicherweise besser für die symbolische Verwendung geeignet als die obige Definition. Es ist jedoch für die allgemeine Verwendung von Gleitkomma-Berechnungen ungeeignet, da Rundungsfehler auftreten

x2+y2{ displaystyle { sqrt {x ^ {2} + y ^ {2}}}}

in der Nähe der Region erweitern x <0, y = 0 (Dies kann sogar zu einer Teilung von führen y um Null).

Eine Variante der letzten Formel, die diese aufgeblasenen Rundungsfehler vermeidet:

Die Ableitung des Hauptwerts des Arguments bezieht sich auf diese Zahl

Anmerkungen:

  • Dies führt zu Ergebnissen im Bereich (−π, π].[note 2]
  • Wie oben erwähnt, der Hauptwert des Arguments atan2 (y, x) kann verwandt sein mit arctan (y/.x) durch Trigonometrie. Die Ableitung lautet wie folgt:
Wenn ((x, y) = (r cos θ, r Sünde θ), dann bräunen(θ/ 2) = y / ((r + x). Es folgt dem

Beachten Sie, dass x2 + y2 + x ≠ 0 in der fraglichen Domäne.

Derivat[edit]

Als die Funktion atan2 ist eine Funktion von zwei Variablen, es hat zwei partielle Ableitungen. An Punkten, an denen diese Derivate existieren, atan2 ist bis auf eine Konstante gleich arctan (y/.x). Daher für x > 0 oder y ≠ 0,

Somit ist der Gradient von atan2 gegeben durch

Informelle Darstellung der Funktion atan2 als Winkelfunktion θ((x, y) = atan2 (y, x) (die nur bis zu einer Konstanten definiert ist) ergibt die folgende Formel für das Gesamtdifferential:

Während der Funktion atan2 ist entlang des Negativs diskontinuierlich x-Achse, die die Tatsache widerspiegelt, dass der Winkel nicht kontinuierlich definiert werden kann, diese Ableitung wird kontinuierlich definiert, außer am Ursprung, was die Tatsache widerspiegelt, dass infinitesimal (und tatsächlich lokal) Änderungen im Winkel kann überall außer dem Ursprung definiert werden. Das Integrieren dieser Ableitung entlang eines Pfades ergibt die gesamte Änderung des Winkels über den Pfad, und das Integrieren über eine geschlossene Schleife ergibt die Wicklungszahl.

In der Sprache der Differentialgeometrie ist diese Ableitung eine Einform und sie ist geschlossen (ihre Ableitung ist Null), aber nicht genau (sie ist nicht die Ableitung einer 0-Form, dh einer Funktion), und tatsächlich erzeugt die erste de Rham-Kohomologie der punktierten Ebene. Dies ist das grundlegendste Beispiel für eine solche Form und für die Differentialgeometrie von grundlegender Bedeutung.

Die partiellen Ableitungen von atan2 enthalten keine trigonometrischen Funktionen, was sie besonders in vielen Anwendungen (z. B. eingebetteten Systemen) nützlich macht, in denen die Bewertung trigonometrischer Funktionen teuer sein kann.

Abbildungen[edit]

Diese Abbildung zeigt Werte von atan2 entlang ausgewählter Strahlen vom Ursprung, die am Einheitskreis markiert sind. Die Werte im Bogenmaß werden innerhalb des Kreises angezeigt. Das Diagramm verwendet die mathematische Standardkonvention, dass die Winkel entlang des Strahls nach rechts von Null gegen den Uhrzeigersinn zunehmen. Beachten Sie, dass die Reihenfolge der Argumente umgekehrt ist. die Funktion atan2 (y, x) berechnet den dem Punkt entsprechenden Winkel ((x, y).

Vergleich der Funktionen von Arctan und Atan2

Diese Abbildung zeigt die Werte von

Arctan((bräunen((θ)){ displaystyle arctan ( tan ( theta))}

zusammen mit

atan2((Sünde((θ),cos((θ)){ displaystyle operatorname {atan2} ( sin ( theta), cos ( theta))}

zum

0θ2π{ displaystyle 0 leq theta leq 2 pi}

. Beide Funktionen sind ungerade und periodisch mit Perioden

π{ displaystyle pi}

und

2π{ displaystyle 2 pi}

und kann somit leicht zu jedem Bereich realer Werte von ergänzt werden

θ{ displaystyle theta}

. Man kann deutlich die Astschnitte der sehen

atan2{ displaystyle operatorname {atan2}}

-Funktion bei

θ=π{ displaystyle theta = pi}

und von der

Arctan{ displaystyle arctan}

-Funktion bei

θ{π2,3π2}}{ displaystyle theta in {{ tfrac { pi} {2}}, ; { tfrac {3 pi} {2}} }}

.[4]

Die beiden folgenden Abbildungen zeigen jeweils 3D-Ansichten atan2 (y, x) und arctan (y/.x) über einen Bereich des Flugzeugs. Beachten Sie, dass für atan2 (y, x), Strahlen in dem X./.Y.-Ebene, die vom Ursprung ausgeht, hat konstante Werte, aber für arctan (y/.x) Linien in dem X./.Y.-Ebene, die durch den Ursprung geht, haben konstante Werte. Zum x > 0geben die beiden Diagramme identische Werte an.

Atan2 Diagramm.svg Atan diagramm.svg

Winkelsumme und Differenzidentität[edit]

Summen von

atan2{ displaystyle operatorname {atan2}}

kann gemäß der folgenden Identität zu einer einzigen Operation zusammengefasst werden

…unter der Vorraussetzung, dass

atan2((y1,x1)±atan2((y2,x2)((– –π,π]]{ displaystyle operatorname {atan2} (y_ {1}, x_ {1}) pm operatorname {atan2} (y_ {2}, x_ {2}) in (- pi, pi]}

.

Der Beweis beinhaltet die Betrachtung von zwei Fällen, von denen einer

y20{ displaystyle y_ {2} neq 0}

oder

x2>0{ displaystyle x_ {2}> 0}

y2=0{ displaystyle y_ {2} = 0}

und

x2<0{ displaystyle x_ {2} <0}

x_2 < 0.

Wir betrachten nur den Fall, in dem

y20{ displaystyle y_ {2} neq 0}

oder

x2>0{ displaystyle x_ {2}> 0}

unter der Vorraussetzung, dass

y0{ displaystyle y neq 0}

oder

x>0{ displaystyle x> 0}

, wo

Arg{ displaystyle operatorname {Arg}}

ist die komplexe Argumentfunktion.

  • Um (4) zu sehen, haben wir die Identität

    eichArgζ=ζ¯{ displaystyle e ^ {i operatorname {Arg} zeta} = { bar { zeta}}}

    wo

    ζ¯=ζ/.|ζ|{ displaystyle { bar { zeta}} = zeta / left | zeta right |}

    daher

    Arg((eichArgζ1eichArgζ2)=Arg((ζ1¯ζ2¯){ displaystyle operatorname {Arg} (e ^ {i operatorname {Arg} zeta _ {1}} e ^ {i operatorname {Arg} zeta _ {2}}) = operatorname {Arg} ({ bar { zeta _ {1}}} { bar { zeta _ {2}}})}

    . Darüber hinaus seit

    Argζ=Argeinζ{ displaystyle operatorname {Arg} zeta = operatorname {Arg} a zeta}

    für jeden positiven realen Wert

    ein{ displaystyle a}

    , wenn wir dann lassen

    ζ=ζ1ζ2{ displaystyle zeta = zeta _ {1} zeta _ {2}}

    und

    ein=1|ζ1||ζ2|{ displaystyle a = { frac {1} { left | zeta _ {1} right | left | zeta _ {2} right |}}}

    dann haben wir

    Arg((ζ1¯ζ2¯)=Arg((ζ1ζ2){ displaystyle operatorname {Arg} ({ bar { zeta _ {1}}} { bar { zeta _ {2}}}) = operatorname {Arg} ( zeta _ {1} zeta _ {2})}

    .

    Aus diesen Beobachtungen ergeben sich folgende Äquivalenzen:

    Logische Folge: wenn

    ((y1,x1){ displaystyle (y_ {1}, x_ {1})}

    und

    ((y2,x2){ displaystyle (y_ {2}, x_ {2})}

    Bei zweidimensionalen Vektoren wird die Differenzformel in der Praxis häufig verwendet, um den Winkel zwischen diesen Vektoren mit Hilfe von zu berechnen

    atan2{ displaystyle operatorname {atan2}}

    , da sich die resultierende Berechnung im Bereich gutartig verhält

    ((– –π,π]]{ displaystyle (- pi, pi]}

    und kann somit in vielen praktischen Situationen ohne Bereichsprüfung verwendet werden.

    Realisierungen der Funktion in gängigen Computersprachen[edit]

    Die Realisierung der Funktion unterscheidet sich von Computersprache zu Computersprache:

    • Die C-Funktion atan2und die meisten anderen Computerimplementierungen wurden entwickelt, um den Aufwand für die Umwandlung von kartesischen in Polarkoordinaten zu verringern und so immer zu definieren atan2(0, 0). Bei Implementierungen ohne vorzeichenbehaftete Null oder wenn positive Nullargumente angegeben werden, wird diese normalerweise als 0 definiert. Es wird immer ein Wert im Bereich zurückgegeben [−π, π] anstatt einen Fehler auszulösen oder eine NaN (keine Zahl) zurückzugeben.
    • In Common Lisp, wo optionale Argumente vorhanden sind, wird die atan Funktion ermöglicht es einem, optional die zu liefern x Koordinate: (atan y x).[5]
    • In Mathematica die Form ArcTan[x, y] wird verwendet, wenn die Ein-Parameter-Form den normalen Arkustangens liefert (beachten Sie, dass die Reihenfolge der Argumente relativ zu der in der obigen Diskussion verwendeten Konvention umgekehrt ist). Mathematica klassifiziert ArcTan[0, 0] als unbestimmter Ausdruck.
    • In Microsoft Excel[6]OpenOffice.org Calc, LibreOffice Calc,[7]Google Spreadsheets,[8]iWork-Nummern,[9] und ANSI SQL: 2008 Standard,[10] das atan2 Bei der Funktion sind die beiden Argumente umgekehrt.
    • Im Intel Architecture Assembler-Code atan2 ist bekannt als die FPATAN Anweisung (Gleitkomma-Teil-Arkustangens).[11] Es kann mit Unendlichkeiten umgehen und die Ergebnisse liegen im geschlossenen Intervall [−π, π], z.B atan2(∞, x) = +π/ 2 für endlich x. Insbesondere, FPATAN wird definiert, wenn beide Argumente Null sind:
      atan2(+0, +0) = +0;
      atan2(+0, −0) = +π;;
      atan2(−0, +0) = –0;
      atan2(−0, −0) = –π.
    Diese Definition bezieht sich auf das Konzept der vorzeichenbehafteten Null.
    • Bei den meisten TI-Grafikrechnern (mit Ausnahme von TI-85 und TI-86) wird die entsprechende Funktion aufgerufen R►Pθ und hat die Argumente umgekehrt.
    • Auf dem TI-85 der arg Funktion wird aufgerufen angle(x,y) und obwohl es zwei Argumente zu nehmen scheint, hat es wirklich nur ein komplexes Argument, das durch ein Zahlenpaar bezeichnet wird: x + yi = (x, y).
    • In anderen mathematischen Schriften als dem Quellcode, wie in Büchern und Artikeln, die Notationen Arctan[12] und Bräunen−1[13] wurden genutzt; Dies sind großgeschriebene Varianten des regulären Arctan und Tan−1. Diese Verwendung stimmt mit der komplexen Argumentnotation überein, so dass Eine Lohe(y, x) = Arg (x + yich).
    • Behandeln Sie auf HP-Taschenrechnern die Koordinaten als komplexe Zahl und nehmen Sie dann die ARG. Oder << C->R ARG >> 'ATAN2' STO.
    • Auf wissenschaftlichen Taschenrechnern kann die Funktion oft als der Winkel berechnet werden, der angegeben wird, wenn ((x, y) wird von rechteckigen Koordinaten in Polarkoordinaten umgewandelt.
    • Systeme, die symbolische Mathematik unterstützen, geben normalerweise einen undefinierten Wert für zurück atan2 (0, 0) oder auf andere Weise signalisieren, dass ein abnormaler Zustand aufgetreten ist.
    • Bei Systemen, die vorzeichenbehaftete Nullen, Unendlichkeiten oder keine Zahl implementieren (z. B. IEEE-Gleitkomma), ist es üblich, angemessene Erweiterungen zu implementieren, die den erzeugten Wertebereich um Folgendes erweitern können:π und –0. Diese können auch NaN zurückgeben oder eine Ausnahme auslösen, wenn ein NaN-Argument angegeben wird.
    • Für Systeme, die eine vorzeichenbehaftete Null implementieren (z. B. IEEE-Gleitkomma), atan2 (−0, x), x <0 birgt das Risiko der Rückgabe des Wertes -π, in dem Fall, in dem die Umsetzung von atan2 (y, x) -0 Eingaben werden nicht richtig verarbeitet.
    • Die kostenlose Mathematikbibliothek FDLIBM (Freely Distributable LIBM) von netlib enthält Quellcode, der zeigt, wie sie implementiert wird atan2 einschließlich der Behandlung der verschiedenen IEEE-Ausnahmewerte.
    • Für Systeme ohne Hardware-Multiplikator die Funktion atan2 kann durch die CORDIC-Methode numerisch zuverlässig implementiert werden. Also Implementierungen von eine Lohe(y) wird wahrscheinlich wählen, um zu berechnen atan2 (y, 1).

    Siehe auch[edit]

    Verweise[edit]

    1. ^ http://scipp.ucsc.edu/~haber/ph116A/arg_11.pdf
    2. ^ Organick, Elliott I. (1966). Ein FORTRAN IV Primer. Addison-Wesley. p. 42. Einige Prozessoren bieten auch die Bibliotheksfunktion ATAN2 an, eine Funktion mit zwei Argumenten (gegenüberliegend und nebeneinander).
    3. ^ “src / math / atan2.go”. Die Go-Programmiersprache. Abgerufen 20. April 2018.
    4. ^ “Wolf Jung: Mandel, Software für komplexe Dynamik”. www.mndynamics.com. Abgerufen 20. April 2018.
    5. ^ “CLHS: Funktion ASIN, ACOS, ATAN”. LispWorks.
    6. ^ “Microsoft Excel Atan2-Methode”. Microsoft.
    7. ^ “LibreOffice Calc ATAN2”. Libreoffice.org.
    8. ^ “Funktionsliste von Google Spreadsheets”.
    9. ^ “Trigonometrische Funktionsliste der Zahlen”. Apfel.
    10. ^ “ANSI SQL: Standard 2008”. Teradata. Archiviert von das Original am 20.08.2015.
    11. ^ IA-32 Intel Architecture Software Entwicklerhandbuch. Band 2A: Instruction Set Reference, AM, 2004.
    12. ^ Burger, Wilhelm; Burge, Mark J. (7. Juli 2010). Prinzipien der digitalen Bildverarbeitung: Grundtechniken. Springer Science & Business Media. ISBN 9781848001916. Abgerufen 20. April 2018 – über Google Books.
    13. ^ Glisson, Tildon H. (18. Februar 2011). Einführung in die Schaltungsanalyse und das Schaltungsdesign. Springer Science & Business Media. ISBN 9789048194438. Abgerufen 20. April 2018 – über Google Books.

    Externe Links[edit]

    Andere Implementierungen / Code für atan2
    1. ^ Damit

    2. ^ Man kann die Periodizität des Ergebnisses anwenden, um es auf einen anderen gewünschten Bereich abzubilden, z [02π)[02π) beim Hinzufügen zu den negativen Ergebnissen.


    after-content-x4