Krummlinige Koordinatensysteme: ebene Polarkoordinaten

Mit ebenen Polarkoordinaten lassen sich geometrische oder dynamische Probleme besonders einfach beschreiben, wenn sie auf eine Ebene beschränkt und rotationssymmetrisch sind. (Das Paradebeispiel dafür ist die Kreisbewegung, die durch die Angabe des Kreisradius und des Drehwinkels anstelle der kartesischen Koordinaten nur eine veränderliche Größe besitzt.) Da die Koordinatenlinien Halbgeraden und Kreise sind, werden sie als krummlinige Koordinaten bezeichnet. Diskutiert werden die wichtigsten Eigenschaften, die Polarkoordinaten von kartesischen Koordinaten unterscheiden; die Vorgehensweise lässt sich dann leicht auf andere krummlinige Koordinatensysteme übertragen. Für den Umgang mit Polarkoordinaten wichtig ist der Zusammenhang zwischen der arctan-Funktion und der Berechnung des Azimutwinkels. In vielen Programmiersprachen wird dies durch die Funktion atan2() erleichtert, die man aber nur anwenden sollte, wenn man die Spitzfindigkeiten ihres Zusammenhangs zur arctan-Funktion kennt.

Inhaltsverzeichnis

Einordnung des Artikels

Mathematische Voraussetzungen: Es ist lediglich der sichere Umgang mit trigonometrischen Funktionen erforderlich.

Einführung

Die Untersuchung von Bewegungen (wie etwa geradlinige Bewegung, Kreisbewegung, Bewegung auf einer Schraubenlinie und so weiter) ist dann besonders einfach,

Überzeugende Beispiele dafür können erst demonstriert werden, wenn die vektorielle Beschreibung von Geschwindigkeit und Beschleunigung diskutiert wird. Zuerst sollen die Grundlagen geschaffen werden, indem ebene Polarkoordinaten eingeführt werden, die geeignet sind für Probleme,

Dazu werden, die wichtigsten Begriffe eingeführt, die die Eigenheiten der Polarkoordinaten oder allgemein eines nicht-kartesischen Koordinatensystems ausmachen, nämlich

Die Untersuchungen können dann als Leitfaden verwendet werden, um weitere Koordinatensysteme zu diskutieren.

Definition der ebenen Polarkoordinaten

Jeder Punkt der zweidimensionalen Ebene kann entweder durch seine kartesischen Koordinaten (x, y) oder durch seine ebenen Polarkoordinaten (r, φ) dargestellt werden. (Wenn klar ist, dass man sich in der zweidimensionalen Ebene bewegt, wird der Zusatz ebene Polarkoordinaten meist weggelassen.)

In der Darstellung (r, φ) ist r der Radius, also der Abstand des Punktes P vom Ursprung, und φ der Winkel zwischen dem Ortsvektor von P und der x-Achse. Der Winkel φ wird meist als Azimut oder Azimutwinkel bezeichnet.

Abbildung 1 zeigt einen Punkt P und rot gekennzeichnet den Ortsvektor von P, also den Vektor, der vom Ursprung zu P zeigt. Die kartesischen Koordinaten von P werden mit (x, y) bezeichnet. Rechts sind zuerst die Formeln angegeben, wie die x- und y-Koordinate aus gegebenen r und φ berechnet wird. Darunter ist der "naive" Versuch gezeigt, wie man die Umkehrung, also Radius und Azimutwinkel aus gegebenen x- und y-Koordinaten berechnet. Für den dargestellten Punkt P, der sich eindeutig im ersten Quadranten befindet und dessen kartesische Koordinaten ungleich 0 sind, erscheint diese Umkehrung plausibel, im allgemeinen Fall muss sie aber verschärft werden.

Abbildung 1: Ein Punkt P in der zweidimensionalen Ebene kann entweder durch seine kartesischen Koordinaten (x, y) oder seine Polarkoordinaten (r, φ) dargestellt werden. Von den gezeigten Formeln zur Umrechnung zwischen den Koordinaten gilt die letzte Formel nur in Spezialfällen, die noch genauer untersucht werden müssen.Abbildung 1: Ein Punkt P in der zweidimensionalen Ebene kann entweder durch seine kartesischen Koordinaten (x, y) oder seine Polarkoordinaten (r, φ) dargestellt werden. Von den gezeigten Formeln zur Umrechnung zwischen den Koordinaten gilt die letzte Formel nur in Spezialfällen, die noch genauer untersucht werden müssen.

Dazu muss man zwei Aspekte beachten, die Abbildung 1 nicht ausdrückt:

  1. Für welche Punkte P der zweidimensionalen Ebene lassen sich Radius r und Azimutwinkel φ überhaupt definieren? Und welche Werte sind für r und φ erlaubt?
  2. Die Formel zur Berechnung des Azimutwinkels φ beruht offensichtlich auf der Formel tan φ = y/x, die nach φ aufgelöst wurde. Ist die Umkehrung der Tangens-Funktion eindeutig und im Einklang mit den Werten für φ, die sich aus 1. ergeben?

Zu 1. Die kartesischen Koordinaten sind offensichtlich für alle Punkte der zweidimensionalen Ebene definiert, so dass

(x, y) ∈ R × R

vorausgesetzt werden kann. Für den Ursprung des Koordinatensystems ist zwar r = 0 eindeutig definiert, aber es ist nicht möglich einen eindeutigen Azimutwinkel anzugeben. Daher wird entweder der Ursprung aus der Definition der Polarkoordinaten ausgenommen (der Ursprung ist durch die Angabe r = 0 aber eindeutig charakterisiert). Oder man definiert im Fall r = 0 für den Azimutwinkel φ einen beliebigen Wert, meist φ = 0.

Für die Azimutwinkel benötigt man einen Vollkreis und es ist eine Frage der Konvention, ob man das Intervall von 0 bis 2 π oder das Intervall von -π bis π verwendet. (Dabei wird immer das Bogenmaß verwendet, auf das Winkelmaß greift man nur zurück, wenn die Winkelangeben besser verständlich sein sollen.) Es ist ebenso eine Frage der Konvention, welcher der beiden Intervall-Endpunkte eingeschlossen und welcher ausgeschlossen wird. (Beide Punkte kann man nicht einschließen, da sonst der Winkel nicht eindeutig definiert ist.) Üblich sind die Intervalle:

φ ∈ [0; 2 π[

oder

φ ∈ ]-π; π]

Im Folgenden wird die erste Konvention φ ∈ [0; 2 π[ verwendet.

Zu 2. Dass die Formel

φ = arctan y/x

ungeeignet ist, um den Azimutwinkel eindeutig zu definieren, sieht man sofort, wenn man von (x, y) zu (-x, -y) übergeht. Offensichtlich müssen sich die Azimutwinkel beider Punkte um π (oder 180° im Winkelmaß) unterscheiden, die Berechnung über den arctan liefert aber identische Winkel φ.

Weiter ist die rechte Seite von φ = arctan y/x für x = 0 nicht definiert und der Azimutwinkel wäre dann nur umständlich über einen Grenzprozess zu definieren. Abbildung 2 zeigt die arctan-Funktion; sie ist für alle reellen x-Werte definiert und hat als Wertebereich das offene Intervall ]-π/2; π/2[. Die Grenzwerte -π/2 und π/2 sind grün eingetragen.

Abbildung 2: Die Darstellung der arctan-Funktion (rot) und der Grenzwerte -π/2 und π/2 für x → -∞ und x → ∞ (grün).Abbildung 2: Die Darstellung der arctan-Funktion (rot) und der Grenzwerte -π/2 und π/2 für x → -∞ und x → ∞ (grün).

Abbildung 3 zeigt nochmals die Definition des Radius r und die jetzt verbesserte Definition des Azimutwinkels φ mit Hilfe der arctan-Funktion aus Abbildung 2.

Abbildung 3: Die Berechnung der Polarkoordinaten r und φ zu gegebenen x und y. Die Fallunterscheidung bei der Berechnung von φ sorgt dafür, dass der Azimutwinkel im vereinbarten Intervall φ ∈ [0; 2 π[ liegt und eindeutig ist.Abbildung 3: Die Berechnung der Polarkoordinaten r und φ zu gegebenen x und y. Die Fallunterscheidung bei der Berechnung von φ sorgt dafür, dass der Azimutwinkel im vereinbarten Intervall φ ∈ [0; 2 π[ liegt und eindeutig ist.

Hinweis: In der Literatur sind für die Umrechnung zwischen kartesischen Koordinaten und Polarkoordinaten oft nur die Formeln in Abbildung 1 angegeben und es wird nicht auf die hier beschriebenen Spitzfindigkeiten eingegangen. Dies setzt voraus, dass der Leser mit der exakten Definition der Polarkoordinaten vertraut ist und die Formeln entsprechend anwendet.

Aufgabe: Überprüfen Sie mit Hilfe der speziellen Punkte

(x, y) = (1, 1), (-1, 1), (-1, -1), (1, -1),

ob die Azimutwinkel in Abbildung 3 tatsächlich richtig berechnet werden.

Beispiele für die Beschreibung von Bewegungen in Polarkoordinaten

1. Beispiel: Kreisbewegung mit konstanter Bahngeschwindigkeit

Ein Paradebeispiel für eine beschleunigte Bewegung ist die Kreisbewegung auf einem Kreis (mit Radius R) mit konstanter Bahngeschwindigkeit (das ist gleichbedeutend mit konstanter Winkelgeschwindigkeit); der Betrag der Geschwindigkeit bleibt unverändert, die Beschleunigung äußert sich darin, dass sich zu jedem Zeitpunkt die Bewegungsrichtung verändert.

Man kann diese Bewegung entweder mit kartesischen Koordinaten oder mit Polarkoordinaten beschreiben. Es wird sich sofort zeigen, dass Polarkoordinaten die an die Bewegungsform angepasste Beschreibung liefern; ihr großer Vorteil ist aber erst erkennbar, wenn man Geschwindigkeit und Beschleunigung berechnet, was hier noch nicht geschehen soll. Zunächst soll lediglich der Ort als Funktion der Zeit angegeben werden.

Abbildung 4 zeigt links oben einen Kreis mit Radius R. Bewegt sich ein Punktteilchen auf der Kreisbahn mit Radius R mit konstanter Bahngeschwindigkeit entgegen dem Uhrzeigersinn, so kann man die Bewegung durch die Umlaufdauer T oder die Winkelgeschwindigkeit ω = 2 π / T charakterisieren. Die Bahngeschwindigkeit lässt sich dann entweder mit der Umlaufdauer oder der Winkelgeschwindigkeit ausdrücken (siehe Abbildung 4 rechts oben).

Abbildung 4: Größen zur Beschreibung einer Bewegung auf einer Kreisbahn mit konstanter Bahngeschwindigkeit: Radius R, Umlaufdauer T, Winkelgeschwindigkeit ω und Bahngeschwindigkeit v. Die Funktionen r(t) und φ(t), die die Bewegung in Polarkoordinaten beschreiben, sind konstant beziehungsweise linear in t (rechts unten).Abbildung 4: Größen zur Beschreibung einer Bewegung auf einer Kreisbahn mit konstanter Bahngeschwindigkeit: Radius R, Umlaufdauer T, Winkelgeschwindigkeit ω und Bahngeschwindigkeit v. Die Funktionen r(t) und φ(t), die die Bewegung in Polarkoordinaten beschreiben, sind konstant beziehungsweise linear in t (rechts unten).

Um die Zeitabhängigkeit der Koordinaten des Punktteilchens zu beschreiben, ist es zweckmäßig den Ursprung des Koordinatensystems in den Mittelpunkt des Kreises zu legen. Die Polarkoordinaten verlangen dann die Angabe von r(t) und φ(t), also also den Abstand des Punktteilchens vom Ursprung und den Winkel gegenüber der x-Achse. Bei der Bewegung auf einer Kreisbahn mit konstanter Bahngeschwindigkeit erhält man die denkbar einfachsten Funktionen: r(t) ist gleich der Konstante R und φ(t) ist proportional zu t mit Proportionalitätsfaktor ω (siehe Abbildung 4 rechts unten oder Abbildung 5, Gleichung (1) und (2)). Dabei wird der Nullpunkt für die Zeit so gewählt, dass φ(0) = 0.

Verwendet man jetzt den Zusammenhang zwischen den kartesischen Koordinaten und den Polarkoordinaten, so kann man die Bewegung auch mit Hilfe von x(t) und y(t) beschreiben: man erhält die cos- beziehungsweise sin-Funktion (siehe Gleichungen (3) und (4) in Abbildung 5).

Abbildung 5: Für die Bewegung auf einer Kreisbahn mit konstanter Bahngeschwindigkeit und für eine Archimedische Spirale (genauere Erklärung im Text), werden die Polarkoordinaten r(t) und φ(t) und die kartesischen Koordinaten x(t) und y(t) angegeben.Abbildung 5: Für die Bewegung auf einer Kreisbahn mit konstanter Bahngeschwindigkeit und für eine Archimedische Spirale (genauere Erklärung im Text), werden die Polarkoordinaten r(t) und φ(t) und die kartesischen Koordinaten x(t) und y(t) angegeben.

2. Beispiel: Die Archimedische Spirale

Abbildung 6 zeigt die Bahnkurve einer Archimedischen Spirale. Die Funktionen r(t) und φ(t), die sie erzeugen, können leicht aus der Kreisbahn gewonnen werden (siehe auch Abbildung 5, Gleichungen (5) und (6)):

Abbildung 6: Die Archimedische Spirale. Zum Zeitnullpunkt sind Azimutwinkel und Radius gleich null, beide wachsen dann proportional zur Zeit.Abbildung 6: Die Archimedische Spirale. Zum Zeitnullpunkt sind Azimutwinkel und Radius gleich null, beide wachsen dann proportional zur Zeit.

Aufgabe: Wie lauten die Parameter A und ω für die Archimedische Spirale in Abbildung 6, wenn

φ(0) = 0 und φ(1 s) = 2 π?

Beschreiben Sie qualitativ, wie sich die Spirale verändert, wenn man ω verdoppelt und A konstant lässt.

Was heißt "krummlinige" Koordinaten?

Im Titel werden die ebenen Polarkoordinaten und die Kugelkoordinaten als krummlinige Koordinaten bezeichnet; dieser Unterabschnitt soll klären, welche Bedeutung dieser Begriff hat. Dabei ist krummlinig als Gegensatz zu kartesisch zu verstehen.

In Abbildung 7 links ist die zweidimensionale Ebene mit den kartesischen Koordinaten x und y zu sehen. Der Begriff kartesisch soll ausdrücken, dass die Koordinatenachsen senkrecht aufeinander stehen und die Koordinatenlinien geradlinige Kurven erzeugen. Mit Letzterem ist gemeint, dass sämtliche Kurven der Art

x = const oder y = const

Geraden sind. Einige dieser Geraden sind in Abbildung 7 rechts gezeigt.

Abbildung 7: Links oben: die zweidimensionale Ebene mit dem kartesischen Koordinatensystem (die Koordinatenachsen stehen senkrecht aufeinander). Rechts oben: Sämtliche Koordinatenlinien, also Kurven der Art x = const oder y = const) sind Geraden. Alle Koordinatenlinien x = const beziehungsweise y = const sind untereinander parallel. Einige der Koordinatenlinien sind in das Koordinatensystem eingetragen. Links unten: In Polarkoordinaten sind die Koordinatenlinien r = const Kreise, also gekrümmte Kurven; daher werden die Polarkoordinaten auch als krummlinige Koordinaten bezeichnet. Rechts unten: Die Koordinatenlinien φ = const sind Halbgeraden, die vom Ursprung radial nach außen zeigen. Sie stehen senkrecht auf den Koordinatenlinien r = const.Abbildung 7: Links oben: die zweidimensionale Ebene mit dem kartesischen Koordinatensystem (die Koordinatenachsen stehen senkrecht aufeinander). Rechts oben: Sämtliche Koordinatenlinien, also Kurven der Art x = const oder y = const) sind Geraden. Alle Koordinatenlinien x = const beziehungsweise y = const sind untereinander parallel. Einige der Koordinatenlinien sind in das Koordinatensystem eingetragen. Links unten: In Polarkoordinaten sind die Koordinatenlinien r = const Kreise, also gekrümmte Kurven; daher werden die Polarkoordinaten auch als krummlinige Koordinaten bezeichnet. Rechts unten: Die Koordinatenlinien φ = const sind Halbgeraden, die vom Ursprung radial nach außen zeigen. Sie stehen senkrecht auf den Koordinatenlinien r = const.

Die bisherigen Aussagen über kartesische Koordinaten erscheinen so selbstverständlich, dass es schwer fällt anzugeben, warum sie ausdrücklich festgehalten werden. Aber sie erhalten ihre tiefere Bedeutung, wenn man auch bei ebenen Polarkoordinaten Koordinatenlinien zeichnet, also Kurven der Art

r = const oder φ = const.

In Abbildung 7 unten links sind einige Koordinatenlinien mit r = const und rechts mit φ = const in das Koordinatensystem eingetragen.

Man erkennt:

  1. Die Kurven r = const sind Kreise und somit krummlinig.
  2. Die Kurven φ = const sind nur Halbgeraden und keine in beide Richtungen unendliche Geraden.
  3. Die Koordinatenlinien, also die Kurven r = const und φ = const, stehen stets senkrecht aufeinander.

Wegen dieser Eigenschaften der Koordinatenlinien werden die Polarkoordinaten als rechtwinklig und krummlinig bezeichnet.

Die Basisvektoren in Polarkoordinaten

Mit Hilfe der Koordinatenlinien lassen sich die Basisvektoren eines Koordinatensystems definieren. Dazu ist in Abbildung 8 oben zunächst das kartesische Koordinatensystem mit einem Punkt P mit den kartesischen Koordinaten (x, y) dargestellt. Man kann auch seine Polarkoordinaten r und φ ablesen.

Zeichnet man jetzt sämtliche Koordinatenlinien ein, so gibt es genau eine in x-Richtung und eine in y-Richtung, die durch den Punkt P gehen. Entlang dieser Koordinatenlinien werden jetzt Einheitsvektoren in positive x- und y-Richtung gezeichnet (siehe Abbildung 8 mitte). Diese Einheitsvektoren bilden die Basisvektoren zum Punkt (x, y). Wegen der speziellen Eigenschaften der Koordinatenlinien (geradlinig, untereinander parallel und orthogonal) erhält man aber zu jedem Punkt (x, y) der zweidimensionalen Ebene die identischen Basisvektoren. Den Ortsvektor vom Ursprung zum Punkt P kann man jetzt eindeutig mit Hilfe der Koordinaten (x, y) und der Basisvektoren ausdrücken (siehe mitte rechts in Abbildung 7).

Abbildung 8: Oben: Ein Punkt P in dr zweidimensionalen Ebene mit seinen kartesischen Koordinaten (x, y) und seinen Polarkoordinaten (r, φ). Mitte: Die Basisvektoren im Punkt (x, y) des kartesischen Koordinatensystems sind definiert als die Einheitsvektoren in Richtung der Koordinatenlinien. Da die Koordinatenlinien parallele Geraden zur x- beziehungsweise y-Achse sind, erhält man in jedem Punkt (x, y) die identischen Basisvektoren. Unten: Analog werden die Basisvektoren in Polarkoordinaten definiert. Anders als bei den kartesischen Koordinaten sind die Basisvektoren nicht mehr für jeden Punkt der Ebene identisch, sondern hängen von φ ab.Abbildung 8: Oben: Ein Punkt P in dr zweidimensionalen Ebene mit seinen kartesischen Koordinaten (x, y) und seinen Polarkoordinaten (r, φ). Mitte: Die Basisvektoren im Punkt (x, y) des kartesischen Koordinatensystems sind definiert als die Einheitsvektoren in Richtung der Koordinatenlinien. Da die Koordinatenlinien parallele Geraden zur x- beziehungsweise y-Achse sind, erhält man in jedem Punkt (x, y) die identischen Basisvektoren. Unten: Analog werden die Basisvektoren in Polarkoordinaten definiert. Anders als bei den kartesischen Koordinaten sind die Basisvektoren nicht mehr für jeden Punkt der Ebene identisch, sondern hängen von φ ab.

Die Konstruktion der Basisvektoren kann man jetzt auf die Polarkoordinaten übertragen, siehe Abbildung 8 unten. Dazu werden wieder zum Punkt P die Koordinatenlinien eingetragen und Einheitsvektoren in deren Richtung definiert. Man erhält den Einheitsvektor in r-Richtung, der radial nach außen zeigt, und den Einheitsvektor in φ-Richtung, der eine Tangente an den Kreis mit Radius r bildet. Die Orientierung der Einheitsvektoren ist dadurch gegeben, in welche Richtung die Radien beziehungsweise die Winkel anwachsen (nach außen beziehungsweise entgegen dem Uhrzeigersinn).

Bei den kartesischen Koordinaten waren die Basisvektoren in jedem Punkt der Ebene identisch. Jetzt hängen die Basisvektoren von φ ab, das heißt auf jeder φ-Koordinatenlinie (also Halbgeraden vom Ursprung radial nach außen) sind die Basisvektoren identisch, siehe Abbildung 8 rechts unten. Und der Ortsvektor vom Ursprung zu P ist parallel zum Einheitsvektor in r-Richtung.

In der Einführung wurde angedeutet, dass die Relevanz krummliniger Koordinaten besser klar wird, wenn Geschwindigkeit und Beschleunigung untersucht werden. Man kann dies sehr gut an den Beispielen der Kreisbewegung und der Archimedischen Spirale veranschaulichen. Der Geschwindigkeitsvektor zeigt immer in die aktuelle Bewegungsrichtung, also in Richtung der Tangente an die Bahnkurve. Er kann jetzt als Linearkombination der Basisvektoren dargestellt werden:

Entsprechend kann man den Vektor der Beschleunigung, also die zeitliche Veränderung der Geschwindigkeit, als Linearkombination der Basisvektoren darstellen, was zu den Begriffen Radial- und Tangential-Beschleunigung führt. Aber dies soll nicht Inhalt dieses Artikels sein, der derartige Diskussionen lediglich vorbereiten soll.

R-Skripte

Die Funktionen atan() und atan2()

Zwei Versionen der arctan-Funktion

Die ausführliche Diskussion der Berechnung des Azimutwinkels φ bei ebenen Polarkoordinaten hat gezeigt, dass man

tan φ = y/x

nicht bedenkenlos in

φ = arctan y/x

umwandeln darf. Der so berechnete Winkel φ muss nicht mit dem Azimutwinkel übereinstimmen. Liegt (x, y) im 1. Quadranten ist diese Umformung immer möglich; um sie für die anderen Quadranten einzusetzen, muss man erst klären, in welchem Wertebereich der Azimutwinkel φ liegen darf. Abbildung 3 zeigt die – wahrlich umständliche – Berechnung des Azimutwinkels aus der arctan-Funktion, wenn der Azimutwinkel zwischen 0 und 2 π liegen soll.

Um die Berechnung des Azimutwinkels in R zu implementieren, ist es naheliegend, die Funktion atan() zu verwenden, die die arctan-Funktion implementiert wie sie in Abbildung 2 gezeigt wurde. Die Beschreibung dieser und weiterer trigonometrischer Funktionen findet man im der Dokumentation im Paket base unter Trig.

Da die arctan-Funktion sehr oft mit einem Quotienten im Argument wie in φ = arctan y/x aufgerufen wird, bieten zahlreiche Programmiersprachen eine weitere Funktion namens atan2(y, x) , mit der Zähler y und Nenner x in arctan y/x einzeln gesetzt werden können. Die 2 im Namen von atan2() soll darauf hinweisen, dass die Funktion atan() mit 2 Eingabewerten implementiert wird – man beachte dabei die Reihenfolge: das erste Argument y ist der Zähler in y/x. In R ist diese Funktion für positive x und y durch atan(y, x) implementiert – wie sie für andere x, y implementiert ist, wird sofort untersucht.

Zuvor soll eine Warnung ausgesprochen werden: Die Implementierung der Fallunterscheidung aus Abbildung 3 ist sehr fehleranfällig. Soll die Funktion atan2() dafür eingesetzt werden, so sind – wie bei jedem Gebrauch von atan2() – vor allem zwei Dinge zu beachten:

  1. Wie ist atan2(y, x) definiert, wenn x gleich 0 ist?
  2. Wie ist atan2(y, x) definiert, wenn (x, y) nicht im 1. Quadranten liegt?

Im folgenden Unterabschnitt werden diese Fragen für die Implementierung von atan2() in R untersucht – in anderen Programmiersprachen können die Antworten anders lauten.

Die Implementierung der Funktion atan2()

In der R-Dokumentation zu atan2() steht ausdrücklich:

The arc-tangent of two arguments atan2(y,x) returns the angle between the x-axis and the vector from the origin to (x; y), i.e., for positive arguments atan2(y,x) == atan(y/x) .

Damit sind die beiden oben gestellten Fragen kurz beantwortet:

  1. Für x = 0 ist zwar y/x nicht definiert, aber der Winkel zwischen der x-Achse und dem Vektor zu (x, y). Also sollte der Winkel gleich π/2 oder -π/2 sein. Nur für (x, y) = (0, 0) ist der Winkel nicht definiert. Man sollte also noch testen, wie atan2(y = 0, x = 0) definiert ist.
  2. Die möglichen Werte von atan2(y, x) sind Winkel zwischen -π und π. Der Test unten wird diese Frage eindeutig beantworten.

Um zu testen, wie atan2() implementiert ist, geht man vor wie es in Abbildung 9 angedeutet ist:

Abbildung 9: Vorgehensweise um herauszufinden, wie die Funktionen atan() und atan2() implementiert sind. Man berechnet zu den rot gezeichneten Punkten auf dem Einheitskreis die x- und y-Koordinate. Mit diesen Werten wird atan(y/x) beziehungsweise atan2(y, x) aufgerufen. Die Ergebnisse sind in der Tabelle dargestellt. Zum leichteren Verständnis werden die Winkel (die von atan() und atan2() im Bogenmaß berechnet werden) ins Winkelmaß umgerechnet.Abbildung 9: Vorgehensweise um herauszufinden, wie die Funktionen atan() und atan2() implementiert sind. Man berechnet zu den rot gezeichneten Punkten auf dem Einheitskreis die x- und y-Koordinate. Mit diesen Werten wird atan(y/x) beziehungsweise atan2(y, x) aufgerufen. Die Ergebnisse sind in der Tabelle dargestellt. Zum leichteren Verständnis werden die Winkel (die von atan() und atan2() im Bogenmaß berechnet werden) ins Winkelmaß umgerechnet.

Das folgende Skript berechnet zuerst atan2(y = 0, x = 0) und dann eine Matrix, die die Werte der Tabelle in Abbildung 9 enthält. Man beachte dabei, dass sowohl die Funktion atan() als auch atan2() Winkel im Bogenmaß berechnen; zur besseren Verständlichkeit wurden alle Winkel in der Tabelle in das Winkelmaß umgerechnet, ebenso wurden die x- und y-Koordinaten gegebenenfalls mit Wurzeln geschrieben. Das Skript liefert jetzt Fließkommazahlen, die deutlich mühsamer zu lesen sind.

atan2(y = 0, x = 0)    # 0

phis <- (0:8) * pi / 4
xs <- cos(phis)
ys <- sin(phis)
at <- atan(ys / xs)
at.2 <- atan2(y = ys, x = xs)

m <- cbind(phis, phis_arc = phis * 180 / pi, xs, ys, atan = at, 
           atan_arc = at * 180 / pi, atan2 = at.2, atan2_arc = at.2 * 180 / pi)

print(m, digits = 3)
#       phis phis_arc        xs        ys      atan  atan_arc     atan2
# [1,] 0.000        0  1.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00
# [2,] 0.785       45  7.07e-01  7.07e-01  7.85e-01  4.50e+01  7.85e-01
# [3,] 1.571       90  6.12e-17  1.00e+00  1.57e+00  9.00e+01  1.57e+00
# [4,] 2.356      135 -7.07e-01  7.07e-01 -7.85e-01 -4.50e+01  2.36e+00
# [5,] 3.142      180 -1.00e+00  1.22e-16 -1.22e-16 -7.02e-15  3.14e+00
# [6,] 3.927      225 -7.07e-01 -7.07e-01  7.85e-01  4.50e+01 -2.36e+00
# [7,] 4.712      270 -1.84e-16 -1.00e+00  1.57e+00  9.00e+01 -1.57e+00
# [8,] 5.498      315  7.07e-01 -7.07e-01 -7.85e-01 -4.50e+01 -7.85e-01
# [9,] 6.283      360  1.00e+00 -2.45e-16 -2.45e-16 -1.40e-14 -2.45e-16

#       atan2_arc
# [1,]  0.00e+00
# [2,]  4.50e+01
# [3,]  9.00e+01
# [4,]  1.35e+02
# [5,]  1.80e+02
# [6,] -1.35e+02
# [7,] -9.00e+01
# [8,] -4.50e+01
# [9,] -1.40e-14

Zur Erklärung:

Zeile 1: Die Funktion atan2() gehorcht offensichtlich der Konvention, dass für (x, y) = (0, 0) der Azimutwinkel φ gleich null gesetzt wird, obwohl y/x jetzt nicht definiert ist.

Zeile 3 bis 7: Die Definitionen lassen sich leicht an Abbildung 9 nachvollziehen.

Zeile 9 und 10: Die berechneten Größen und weitere Größen werden zu einer Matrix mit 8 Spalten zusammengefügt. Die 9 Zeilen entsprechen den 9 Winkeln. Die 8 Spalten bedeuten:

  1. Die Winkel φ im Bogenmaß (Spalte phis ).
  2. Die Winkel φ im Winkelmaß (Spalte phis_arc ).
  3. Die x-Koordinaten der Punkte auf dem Einheitskreis (Spalte xs ). Aufgrund von Rundungsfehlern sind einige Werte nicht exakt gleich 0.
  4. Die y-Koordinaten der Punkte auf dem Einheitskreis (Spalte ys ). Rundungsfehler wie bei den xs.
  5. Die Werte atan(y/x) mit den 9 Punkten (Spalte atan im Bogenmaß).
  6. Die Winkel der Spalte atan werden ins Winkelmaß umgerechnet (Spalte atan_arc ). Rundungsfehler wie bei den xs.
  7. Die Werte atan2(y, x) mit den 9 Punkten (Spalte atan2 im Bogenmaß).
  8. Die Winkel der Spalte atan2 werden ins Winkelmaß umgerechnet (Spalte atan2_arc ). Rundungsfehler wie bei den xs.

Zeile 12 bis 33: An den Ergebnissen erkennt man wichtige Eigenschaften der Funktionen atan() und atan2():

  1. Die Funktion atan() nimmt Werte zwischen -π/2 und π/2 an.
  2. Beim Übergang von (x, y) zu (-x, -y) bleibt der Funktionswert identisch – klar, da im Argument y/x gebildet wird.
  3. Die Funktion atan2() nimmt Werte zwischen -π und π an. Für den Punkt (x, y) = (-1, 0) erhält man π (und nicht -π).
  4. Die Funktion atan2(y, x) berechnet – wie in der Dokumentation beschrieben – den Winkel zwischen der x-Achse und dem Vektor vom Ursprung zu (x, y). Diese Winkel sind im 1. und 2. Quadranten positiv, im 3. und 4. Quadranten negativ.

Implementierung der Berechnung des Azimutwinkels für ebene Polarkoordinaten

Die Fallunterscheidung aus Abbildung 3 zur Berechnung des Azimutwinkels zu implementieren ist sehr fehleranfällig. Der Test aus dem letzten Unterabschnitt hat gezeigt, dass atan2() so implementiert ist wie der Azimutwinkel, wenn man

φ ∈ ]-π, π]

vereinbart. Aber dann kann es nicht schwer sein, atan2() einzusetzen, um den Azimutwinkel mit der Konvention

φ ∈ [0, 2π[

zu implementieren. Das folgende Skript realisiert dies in der Funktion azimuth(), die jetzt die Argumente x und y besitzt, was andeuten soll, dass man die kartesischen Koordinaten eingibt – und nicht schon die Argumente der arctan-Funktion.

azimuth <- function(x, y){
  if(y < 0){
    return( 2*pi + atan2(y = y, x = x) )
  } else {
    return( atan2(y = y, x = x) )
  }
}

Aufgabe: Überprüfen Sie mit Hilfe der Tabelle in Abbildung 9, ob die Fallunterscheidung in der Implementierung von azimuth() das gewünschte Ergebnis liefert.

♦ ♦ ♦

Man kann jetzt den Test ähnlich wie oben durchführen, um festzustellen, ob azimuth() die geforderte Konvention einhält::

phis <- (0:8) * pi / 4
xs <- cos(phis)
ys <- sin(phis)

az <- azimuth.vec(x = xs, y = ys)

m <- cbind(phis, phis_arc = phis * 180 / pi, xs, ys, 
           azimut = az, azimut_arc = az * 180 / pi)
print(m, digits = 3)          
#       phis phis_arc        xs        ys azimut azimut_arc
# [1,] 0.000        0  1.00e+00  0.00e+00  0.000          0
# [2,] 0.785       45  7.07e-01  7.07e-01  0.785         45
# [3,] 1.571       90  6.12e-17  1.00e+00  1.571         90
# [4,] 2.356      135 -7.07e-01  7.07e-01  2.356        135
# [5,] 3.142      180 -1.00e+00  1.22e-16  3.142        180
# [6,] 3.927      225 -7.07e-01 -7.07e-01  3.927        225
# [7,] 4.712      270 -1.84e-16 -1.00e+00  4.712        270
# [8,] 5.498      315  7.07e-01 -7.07e-01  5.498        315
# [9,] 6.283      360  1.00e+00 -2.45e-16  6.283        360

azimuth(x = 0, y = 0)    # 0
azimuth(x = 1, y = 0)    # 0

Zeile 5: verwendet die vektorisierte Version von azimuth(), siehe Aufgabe unten.

Die letzte Zeile des Skripts zeigt, dass in der 9. Zeile der Matrix der Winkel 360° aufgrund eines Rundungsfehlers berechnet wurde.

Aufgabe: Aus dem Test von atan() und atan2() ist zu ersehen, dass diese Funktionen vektorisiert sind.

Entscheiden Sie: Ist die Funktion azimuth() vektorisiert?

Hinweis: Der Begriff der Vektorisierung wird erklärt in Die Familie der apply-Funktionen in R Teil 2: Die Verarbeitung mehrerer Listen mit mapply(), Map() und outer()