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.
- Einordnung des Artikels
- Einführung
- Definition der ebenen Polarkoordinaten
- Beispiele für die Beschreibung von Bewegungen in Polarkoordinaten
- 1. Beispiel: Kreisbewegung mit konstanter Bahngeschwindigkeit
- 2. Beispiel: Die Archimedische Spirale
- Was heißt "krummlinige" Koordinaten?
- Die Basisvektoren in Polarkoordinaten
- R-Skripte
- Die Funktionen atan() und atan2()
- Zwei Versionen der arctan-Funktion
- Die Implementierung der Funktion atan2()
- Implementierung der Berechnung des Azimutwinkels für ebene Polarkoordinaten
Einordnung des Artikels
- Ausgewählte Kapitel der Mathematik (für Programmierer, Informatiker, Ingenieure und Naturwissenschaftler)
- Anwendungen in Physik und Technik
- Klassische Mechanik
- Krummlinige Koordinatensysteme: ebene Polarkoordinaten
- Klassische Mechanik
- Anwendungen in Physik und Technik
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,
- wenn das Problem gewisse Symmetrien aufweist (welche Symmetrien besitzen die soeben genannten Bewegungen?) und
- wenn es gelingt, ein Koordinatensystem zu finden, das genau diese Symmetrien besitzt.
Ü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,
- die in einer Ebene stattfinden und
- die radiale Symmetrie besitzen.
Dazu werden, die wichtigsten Begriffe eingeführt, die die Eigenheiten der Polarkoordinaten oder allgemein eines nicht-kartesischen Koordinatensystems ausmachen, nämlich
- Koordinatenlinien,
- krummlinige Koordinaten,
- Basisvektoren eines Koordinatensystems,
- Spitzfindigkeiten, die die arctan-Funktion betreffen.
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.
Dazu muss man zwei Aspekte beachten, die Abbildung 1 nicht ausdrückt:
- 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?
- 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 3 zeigt nochmals die Definition des Radius r und die jetzt verbesserte Definition des Azimutwinkels φ mit Hilfe der arctan-Funktion aus Abbildung 2.
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).
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).
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)):
- wie bei der Kreisbewegung mit konstanter Winkelgeschwindigkeit wächst der Winkel φ proportional zur Zeit t: φ(t) = ωt.
- der Radius r(t) wächst proportional zum Winkel φ(t) (mit Proportionalitätsfaktor A) und ist somit auch proportional zu t: r(t) = Aφ(t) = Aωt.
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.
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:
- Die Kurven r = const sind Kreise und somit krummlinig.
- Die Kurven φ = const sind nur Halbgeraden und keine in beide Richtungen unendliche Geraden.
- 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).
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:
- Im Fall der Kreisbewegung ist die Geschwindigkeit parallel zum Einheitsvektor eφ; es gibt keine Komponente in radialer Richtung. Zerlegt man die Geschwindigkeit gemäß der kartesischen Basisvektoren in Komponenten, sind sowohl die x- als auch die y-Komponente zeitlich variabel und geben nicht die charakteristische Eigenschaft der Bewegung wieder.
- Im Fall der Archimedischen Spirale hat die Geschwindigkeit sowohl eine Komponente in Richtung von eφ als auch eine Komponente in Richtung von er. Auch hier sollte klar sein, dass die Zerlegung der Geschwindigkeit gemäß der Basisvektoren der Polarkoordinaten aussagekräftiger ist als eine Zerlegung in kartesischen Koordinaten.
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:
- Wie ist
atan2(y, x)
definiert, wenn x gleich 0 ist? - 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:
- 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. - 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:
- Man definiert die Winkel φ durch die (roten) Punkte auf dem Einheitskreis (1. Spalte in der Tabelle, in der zweiten Spalte sind die Winkel nochmals im Winkelmaß angegeben).
- Zu diesen Punkten berechnet man jeweils die x- und y-Koordinate (3. und 4. Spalte der Tabelle in Abbildung 9).
- Mit den berechneten x- und y-Werten wird arctan(y/x) (siehe 5. Spalte) und atan2(y, x) (siehe 6. Spalte) berechnet.
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.
- Es werden zuerst die 9 Winkel von 0° bis 360° definiert (mit Abstand 45°, wobei natürlich das Bogenmaß verwendet wird, siehe Zeile 3).
- Zu den Winkeln werden die x- und y-Koordinaten der zugehörigen Punkte auf dem Einheitskreis berechnet, siehe Zeile 4 und 5.
- Mit Hilfe der x- und y-Koordinaten werden atan(y/x) und atan2(y, x) berechnet, siehe Zeile 6 und 7.
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:
- Die Winkel φ im Bogenmaß (Spalte
phis
). - Die Winkel φ im Winkelmaß (Spalte
phis_arc
). - Die x-Koordinaten der Punkte auf dem Einheitskreis (Spalte
xs
). Aufgrund von Rundungsfehlern sind einige Werte nicht exakt gleich 0. - Die y-Koordinaten der Punkte auf dem Einheitskreis (Spalte
ys
). Rundungsfehler wie bei den xs. - Die Werte
atan(y/x)
mit den 9 Punkten (Spalteatan
im Bogenmaß). - Die Winkel der Spalte
atan
werden ins Winkelmaß umgerechnet (Spalteatan_arc
). Rundungsfehler wie bei den xs. - Die Werte
atan2(y, x)
mit den 9 Punkten (Spalteatan2
im Bogenmaß). - Die Winkel der Spalte
atan2
werden ins Winkelmaß umgerechnet (Spalteatan2_arc
). Rundungsfehler wie bei den xs.
Zeile 12 bis 33: An den Ergebnissen erkennt man wichtige Eigenschaften der Funktionen atan() und atan2():
- Die Funktion atan() nimmt Werte zwischen -π/2 und π/2 an.
- Beim Übergang von (x, y) zu (-x, -y) bleibt der Funktionswert identisch – klar, da im Argument y/x gebildet wird.
- Die Funktion atan2() nimmt Werte zwischen -π und π an. Für den Punkt (x, y) = (-1, 0) erhält man π (und nicht -π).
- 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?
- Falls ja: Begründen Sie warum.
- Falls nein: wie erzeugt man eine vektorisierte Version von azimuth()?
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()