|
Die Anwendung der trigonometrischen Funktionen (Winkelfunktionen)
führt über besonders viele Fallstricke. Nut in einfachen Fällen erkennt man sofort eine fehlende oder offensichtlich falsch funktionierende Formel. |
Schwieriger, aber sehr zahlreich sind jene Fälle, in denen eine Formel oder ein Algorithmus nur unter bestimmten Bedingungen richtige Ergebnisse liefert. Einige dieser Fälle werden hier vorgestellt. |
Algorithmen
|
Ausgewählte IT-Rezepte |
| Winkelfunktionen | Spezielle Probleme trigonometrischer Funktionen |
| Einheiten | Dezimalgrad, Grad+Minuten+Sekunden, Gon, Himmelsrichtung, Stunden... |
| Richtung | Start-Richtung, Messung mit oder entgegen dem Uhrzeiger ? |
| Periode | Zyklische Wiederholung der Ergebnisse von Winkelfunktionen |
| Negative Winkel | Winkel < 0 und > Vollkreis |
| Sonderfälle | Sonder-behandlung für 0°, 90°, 180°, 270°, 360° |
| Ersatz | Ersatz und gegenseitige Umrechnung der Funktionen |
| VBA | Einige spezielle Funktionen für Visual Basic |
| Verwandte Themen | Reihen-Entwicklung der Winkelfunktionen und anderer wichtiger Funjktionen |
| Links |
Ausgewählte
|
Winkelfunktionen |
|
| Trigonometrische (Winkel)-Funktionen führen bei der Programmierung relativ oft zu Problemen. Es gibt erhebliche Unterschiede zwischen der theoretischen Darstellung im Formel-Verzeichnis und der praktischen Anwendung. |
Typische Problem-Felder: • Unterschiedliche Einheiten, Mischung, Verwechslung • Eingeschränkte Anwendungs-Bereiche • Unterschiedliche Periode, mehrdeutige Ergebnisse • Fehlende Funktionen |
Richtungs-DifferenzEin Winkel ist ein relatives Maß für die Differenz zwischen 2 Richtungs-Angaben. Allerdings werden nur selten beide Richtungen angegeben:Null-WinkelMeist wird je nach Anwendungs-Gebiet eine Richtung als 'Standard-' oder 'Null-Richtung' angenommen, und zwar ohne besondere Hinweise. Darüber hinaus gibt es - wie bei anderen Maßen - regionale oder nationale Abweichungen.Bei 3dimensionalen Aufgaben sind unterschiedliche Referenz-Ebenen und Richtungen (Bezugssysteme) üblich. Beispiele: In Mathematik und Geometrie wird die (meist nach rechts führende) X-Achse als Null-Winkel angenommen, in allen praktischen Anwendungen (Astronomie, Kartografie, ...) die meist nach 'vorne' bzw. 'oben' führende Nord-Richtung oder Y-Achse. |
Mess-RichtungMan kann einen ebenen Winkel - ausgehend vom Null-Winkel - normalerweise in 2 Richtungen messen:In 'Richtung des Uhrzeigers', oder entgegengesetzt. Je nach Anwendungs-Gebiet ist eine der Richtungen vorgeschrieben, bevorzugt, oder beide Mess-Richtungen sind möglich. Beispiele: Winkel werden (nur) in der Mathematik entgegen dem Uhrzeiger angegeben. In allen praktischen Anwendungen (Astronomie, Kartografie, ..) werden Winkel in Richtung des Uhrzeigers angegeben. In der Informatik wird die y-Achse oft umgedreht: Für Monitore und Grafik liegt der Ursprung in der linken oberen Ecke, y-Werte nehmen nach unten (!) zu. Das führt bei Umwandlung von XY-Koordinaten in Winkel und umgekehrt oft zu falschen Ergebnissen. |
Maß-EinheitenEs gibt nur ein universelles Maß für ebene Winkel, den vollen Kreis (für Raumwinkel: den vollen Raum).Je nach Anwendungs-Gebiet wird der Vollkreis in unterschiedliche Einheiten geteilt, z.B. in 360 Grad, in -180..+180 Grad, in 0..400 Neugrad, in das Bogenmaß 0..2pi, in 12 oder 24 Stunden, in Himmelsrichtungen, ... |
Eine Überschreitung der Vollkreis-Grenzen ist je nach Anwendung erlaubt oder verboten, und - wenn erlaubt - entweder periodisch identisch oder unterscheidbar. Beispiel: Man kannn Winkel von >12 Stunden erlauben oder nicht, und man kann 15 Stunden als identisch mit (15-12)=3 Stunden ansehen, oder von einem 3-Stunden Winkel ausdrücklich unterscheiden. |
|
Für Menschen und von Menschen bediente Geräte wird meist das
Grad-Maß 0..360 oder -180..+180 verwendet - in der Informatik
für Ein- und Ausgabe. Im französischen Einfluss-Gebiet werden gelegentlich
Neugrad 0..400 (gon) verwendet - gefährlich leicht zu verwechseln mit dem
Gradmaß. Für Funktionen und Algorithmen, in allen Programmiersprachen, in Kalkulationsprogrammen, und anspruchsvollen ('wissenschaftlichen') Taschenrechnern wird fast ausschließlich das Bogenmaß 0..2*pi verwendet. Für anspruchslose Taschenrechner und sehr einfache Formeln wird jedoch manchmal ebenfalls - ohne Hinweise - das Gradmaß verwendet. ♦ Umrechnung Grad-Maß ↔ Bogenaß |
In der praktischen Orientierung werden - durchaus sinnvoll - die klassischen
Himmelsrichtungen mit 4,8 oder 16 Abstufungen verwendet,
manchmal (z.B. militärisch) auch die Richtung des Uhr-(Stunden)-Zeigers. In der Astronomie werden gleichzeitig mehrere Maße verwendet, darunter Grad-Maß und Stunden-Winkel, darüber hinaus mehrere Bezugssysteme mit unterschiedlichen Referenz-Ebenen und -Richtungen (z.B. Horizontal, Ekliptisch, Galaktisch, ...) und mehrere Zeit-Skalen (→ Weltzeit, Zonenzeit, → Ortszeit, → Sternzeit). |
| In der praktischen Programmierung muss man Daten oft zwischen mehreren Einheiten oder ganzen Einheiten-Systemen umrechnen (transformieren). | ♣ Tipp: Geben sie in eigenen Arbeiten immer die verwendeten Normen an, z.B. Null-Richtung, Mess-Richtung, Maß-Einheiten (und deren zulässige Bereiche), etc. |
Periode, Werte-Bereich und Fehler-WerteViele trigonometrische Funktionen und Algorithmen sind periodisch, d.h. ihre Ergebnisse wiederholen sich mit stetig zunehmenden Argumenten. Man muss diese Effekte kennen (oder ausprobieren) und in Programmen manchmal ergänzen, ändern, kompensieren.Beispiel: In der Geometrie ist der Anstieg von 2 Geraden mit 45° oder 225° vollkommen äquivalent. Für praktische Anwendungen (z.B. Orientierung) besteht jedoch ein erheblicher Unterschied zwischen NO und SW, den man im Algorithmus abfangen und berücksichtigen muss. |
Viele Funktionen und Algorithmen sind nur in einem bestimmten Werte-Bereich verwendbar, und weisen darüber hinaus Sonder-Werte wie 0 (Null) oder ∞ (unendlich) auf. Beispiel: Die Winkel 0°, 90°, 180°, 270° und 360° sind immer verdächtig: Man muss sie oft abfangen und getrennt behandeln. |
Geografie & KartografieViele Algorithmen sind nur für die Nordhalbkugel der Erde ausgelegt, manche nur für westliche Länge von Greenwich. Suchen sie solche Algorithmen zum Vergleich auch in australischen oder neuseeländischen Webs.● USA US-Quellen verwenden meist ohne besondere Warnungen westliche Länge und nördliche Breite. Dar&über hinaus ist bei Längen-Einheiten große Vorsicht geboten: Oft werden dort noch die mittelalterlichen Einheiten verwendet, meist sogar ohne Warnung oder Hinweis. Zusätzlich gelten die 'trigonometrischen Warnungen': Vorsicht, wenn einzelne oder mehrere Argumente (Parameter) den Null-Meridian oder den Äquator überschreiten ! |
3DBei 3dimensionalen Systemen sind übliche Formeln aus Büchern oder Internet nur selten brauchbar.Die meisten dieser Algorithmen haben einen eingeschränkten Anwendungs-Bereich. Beim Überschreiten der Grenzen (xy-Ebene, yz-Ebene, Äquator-Ebene, ..) ergeben sich oft Fehler, im schlimmsten Fall unbemerkt falsche Werte. ♣ Dagegen hilft nur ausführliche Recherche, klug angelegte Tests, in manchen Fällen Drehung oder Spiegelung eines Systems, bis es wieder in den zulässigen Bereich fällt. |
Fehlende Funktionen:In seltenen Fällen bietet ein System keine (XSLT) oder nur wenige (VBA) Winkelfunktionen: Man kann fehlende Funktionen ↓ aus anderen umrechnen oder mit → Reihen-Entwicklung (Iterationen) komplett selbst berechnen. |
Ein Sonderfall sind einfache Mikroprozessoren: Wenn überhaupt keine mathematischen Funktionen verfügbar sind, oder wenn man auf Kosten der Genauigkeit extrem schnell rechnen will, dann kann man alle Winkelfunktionen mit → Reihen-Entwicklung selbst berechnen. |
Winkel-Maße und Einheiten |
|
|
Leider wird das verwendete Maß nicht immer angegeben. Wenn eine Formel
oder ein Algorithmus nicht wie erwartet funktioniert, dann versucht man zuerst
ein anderes Maß • In der Geometrie (Klassische Formel-Sammlungen) wird meist das Grad-Maß 0..grad..360 verwendet. In Geografie und Kartografie werden sowohl Dezimalgrad verwendet (z.B. 16.3744°) als auch Grad, Minuten, Sekunden (z.B. 16°22'27.8"). Die → Umrechnung ist bei Berücksichtigung der Rundung nicht so einfach wie meist angenommen. • In der Informatik (in allen Kalkulations-Programmen, Programmiersprachen, etc.) wird fast ausschließlich das Bogenmaß 0..rad..2pi verwendet.
rad(x) = grad(x) / 180 * pi
Bessere Taschenrechner erlauben die Umschaltung zwischen Grad- und Bogenmaß.grad(x) = rad(x) / pi * 180 ♦ Beispiele zur Umrechnung Grad-Maß ↔ Bogenmaß • Durch die französische Revolution wurden viele heute verwendete Einheiten eingeführt. Neugrad 0..gon..400 haben sich ausnahmsweise nicht durchgesetzt, werden aber vereinzelt im französischen Sprachraum angewendet. |
• In der Astronomie werden einige spezielle Winkel (z.B. Rektaszension, Stundenwinkel) im Stundenmaß 0..ra..24 angegeben.
ra(x) = grad(x) / 15
Dieses Maß wird teilweise auch in der militärischen Orientierung
('Richtung 10 Uhr') eingesetzt.grad(x) = ra(x) * 15 • Die Himmelsrichtung ist sehr Praxis-freundlich: N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW N
Diese Angabe ist in vielen Fällen besser verständlich als ein numerischer
Richtungs-Winkel, wird jedoch in der Informatik bei der Ausgabe von Daten sehr
vernachlässigt.Die → Umrechnung in andere Winkel-Maße erfordert je nach Anzahl (4,8,16) der Richtungen die genaue Überlegung der Rundung. International wird an Stelle von O (Ost) meist die englische Abkürzung E (East) verwendet. |
Negative Winkel, Vollkreis-Überschreitung |
|
Vollkreis-ÜberschreitungWenn man bei Angabe eines Winkels den Vollkreis über- oder unterschreitet, dann kommt man nach jeder vollen Umdrehung zur gleichen Richtung.▲ Es kommt jedoch auf das Anwendungs-Gebiet an, ob man derartige Fälle 6uuml;berhaupt erlaubt, bzw. ob man sie unterscheidet oder nicht. |
Beispiel: Wenn man ein Lenkrad um eine ganze Umdrehung nach rechts dreht, dann kann man es beim Ansehen von der neutralen Stellung nicht unterscheiden, die Wirkung unterscheidet sich jedoch erheblich. |
VereinfachungIm allgemeinen Fall istw = w + 360° = w - 360°
Zur Vermeidung unangenehmer Werte-Bereiche ist daher in vielen Algorithmen
eine Vereinfachung enthalten:
if (winkel>360) {winkel = winkel - 360}
oder besser (und im Bogenmaß):
else if(winkel<0) {winkel = winkel + 360}
vollkreis = 0
while (winkel>(2*Pi)) {
winkel = winkel - 2*Pi
}vollkreis = vollkreis - 1 while(winkel<0) {
winkel = winkel + 2*Pi
}
vollkreis = vollkreis + 1 |
• Das gleiche Ergebnis kann man mit der → Modulo-Funktion erreichen, allerdings nur dann, wenn diese mit Gleitkomma-Zahlen anwendbar ist ! Sie müssen selbst je nach Anwendung entscheiden, ob eine Vereinfachung durch Eliminierung ganzer Vollkreise zulässig ist. Andernfalls kann man zwar vereinfachen, muss jedoch die Anzahl der addierten oder subtrahierten Vollkreise zählen und im weiteren Verlauf berücksichtigen. Mindestens bei der Ausgabe der Ergebnisse ist meist eine Korrektur von Vollkreis-Überschreitungen angebracht. |
Geografie und KartografieAuf diesem Gebiet gelten besondere Einschränkungen:● Die Geografische Länge wird z.B. entweder 0..lon..360° oder -180°..lon..+180° angegeben. Als Referenz gilt der Null-Meridian durch Greenwich / London. Für Mitteleuropa, Asien und Australien wird lon>0 angegeben, allenfalls mit dem Zusatz 'östlich' (east, von Greenwich). Für Westeuropa, Westafrika und Amerika wird in Europa meist lon<0 oder 'westlich' angegeben, in den USA und in vielen US-Publikationen und Webseiten jedoch oft ohne Hinweis lon>0 In diesem Fall muss man das Vorzeichen der geogr. Länge in Daten und Formeln umkehren ! |
Die Geografische Breite wird immer -90°..lat..+90° angegeben. Man muss durch geeignete Maßnahmen ausschließen, dass Algorithmen unter speziellen Bedingungen Winkel >90° ergeben. In australischen Publikationen und Webseiten lokaler Bedeutung wird manchmal für Gebiete südlich des Äquators lat>0 angegeben. In diesem Fall muss man das Vorzeichen der geogr. Breite in Daten und Formeln umkehren. Die beiden Pole sind (nicht nur rechnerische) Ausnahmen: Am Nordpol ist die Angabe der Richtung unbestimmt, da es in allen Richtungen nur genau nach Süden geht. Für Gebiete nahe der Pole verwendet man meist spezielle Algorithmen, Modelle und Abbildungen, die sich von den allgemeinen (z.B. für Europa und die USA) unterscheiden. |
Ersatz fehlender Funktionen |
|
|
In der Informatik gibt es kaum Umgebungen, in denen alle
trigonometrischen Funktionen angeboten werden. Man kann die seltenen Funktionen jedoch fast immer aus den meist verfügbaren berechnen. Dieses Kapitel gibt dazu einige unverbindliche Beispiele. Verwendete Zeichen und Namen:
x^2 = x*x = x2 (Potenz-Operator oder -Funktion)
arctan = atn (Arcustangens-Funktion) sgn = Vorzeichen-Funktion (-1,0,+1) sqrt = sqr (Quadratwurzel-Funktion) tan = tg (Tangens-Funktion) |
Standard-Funktionen
tan(x) = sin(x) / cos(x)
ctg(x) = 1 / tan(x) = cos(x) / sin(x) Umkehrung der Standard-Funktionen
arccos(x) = arctan(-x / sqrt(-x * x + 1)) + 2 * arctan(1)
arctan - wird oft auch mit atn
bezeichnet !
arcctg(x) = arctan(x) + 2 * arctan(1) arcsin(x) = arctan(x / sqrt(-x * x + 1)) |
|
Hyperbolische Funktionen
sinh(x) = (exp(x) - exp(-x)) / 2
sinh(x) = sqrt(cosh(x)^2 + 1) cosh(x) = 1/2 * (exp(x) + exp(-x)) cosh(x) = sqrt(sinh(x)^2 + 1) tanh(x) = sinh(x) / cosh(x) tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)) arcsinh(x) = ln(x + sqr(x^2 + 1)) arcsinh(x) = arctanh(x / sqr(x^2+1)) arccosh(x) = ln(x + sqr(x^2 - 1)) arccosh(x) = arctanh(sqr(x^2-1) / x) arctanh(x) = 1/2 * ln((1+x) / (1-x)) für -1..x..+1 arcctgh(x) = 1/2 * ln((x+1) / (x-1)) |
Secans und Cosecans
sec(x) = 1 / cos(x)
cosec(x) = 1 / sin(x) arcsec(x) = arctan(x / sqrt(x*x-1)) + sgn(|x|-1) * (2*arctan(1)) arccosec(x) = arctan(x / sqrt(x*x-1)) + (sgn(x)-1) * (2*arctan(1)) sech(x) = 2 / (exp(x) + exp(-x)) cosech(x) = 2 / (exp(x) - exp(-x)) arcsech(x) = ln((sqrt(-x^2 + 1) + 1) / x) arccosech(x) = ln((sgn(x) * sqrt(x^2 + 1) + 1) / x) |
Reihen-EntwicklungWenn die Standard Winkelfunktionen nicht verfügbar sind, dann kann man diese selbst durch → Reihen-Entwicklung (Iteration) berechnen.Prozessor-intern werden alle Winkelfunktionen (und einige andere) mit Reihen-Algorithmen berechnet. Diese Methode kann man auch anwenden, um z.B. mit einfachen MikroProzessoren unter Verzicht auf Genauigkeit besonders schnell zu rechnen. |
♦ Einige Algorithmen zur → Reihen-Entwicklung werden in diesem Web detailliert vorgestellt, meist mit Demo-Beispielen für Kalkulations-Programme sowie Funktionen in den Programmiersprachen C/C++, Javascript und Visual Basic und Live-Berechnung: → ArcusTangens, → Cosinus, → Exponential, → Logarithmus, → Quadratwurzel, → Sinus, ... |
Visual Basic (VBA) Winkel-Funktionen(ausgewählte Beispiele) |
|
Kreiszahl PiVisual Basic bietet als Kuriosum unter ernstzunehmenden Programmiersprachen weder eine Konstante noch eine Funktion für die oft benötigte Kreiszahl Pi.● Die Definition einer Konstanten (hier: c_pi) ist einfach, schnell und empfehlenswert. Sie kann von allen Funktionen und Subs verwendet werden. Es ist sinnlos, mehr Stellen anzugeben. ● Man kann eine globale Variable (hier v_pi) anlegen. die ebenfalls von allen Funktionen und Subs verwendet werden kann, jedoch einmalig bei der ersten Anwendung berechnet werden muss. ● Man kann in jeder Funktion eine private Variable (hier my_pi) anlegen, die jedoch bei jeder einzelnen Anwendung neu berechnet wird. |
Const c_pi = 3.14159265358979
Dim v_pi As Double Function xyz() Dim my_pi As Double
If (v_pi = 0) Then v_pi = 4 * Atn(1)
End Function
my_pi = 4 * Atn(1) '...
|
HimmelsrichtungDiese VBA-Funktion gibt die Himmelsrichtung für einen Winkel in Grad 0..wg..360 zurück. Die Funktion liefert die meist verwendeten 8 Richtungen und lässt sich leicht für 4 oder 16 Richtungen adaptieren, ebenso natürlich für Winkel im Bogenmaß.Der zulässige Werte-Bereich des Winkels muss unbedingt eingehalten (oder vorher sichergestellt) werden. |
Function grad_to_hiri(wg As Double) As String
Dim i As Integer Dim hr As Variant
hr = Array("N", "NO", "O", "SO",
"S", "SW", "W", "NW", "N")
End Function
i = CInt(Round(wg / 45, 0)) grad_to_hiri = CStr(hr(i)) |
ArcusSinus und ArcusCosinusProgrammierung der fehlenden Funktionen arcsin,arccos in VBA (ohne Gewähr).• Die Kreiszahl Pi (π) wird hier als globale Konstante c_pi eingesetzt. • Die Funktions-Namen werden so gewählt, dass keine Kollision mit den 'echten' Namen auftreten kann. |
• Optional kann ein Quadrant 1..q..4 angegeben werden. In diesem Fall wird aus den beiden Ergebnissen das gewünschte ausgewählt. • Sonderfälle (hier für die Argumente x=-1, x=+1) werden abgefangen und getrennt berechnet. Damit werden keine Fehler-Werte ausgegeben. |
|
Const c_pi = 3.14159265358979
Function my_arccos(x As Double, Optional q As Integer = 0) As Double Dim wb As Double
Select Case x
End Function
Case Is = 1: wb = 0 Case Is = -1: wb = pi Case Else wb = Atn(-x / Sqr(-x * x + 1)) + c_pi / 2
End SelectIf (q = 3 Or q = 4) Then wb = 2 * c_pi - wb my_arccos = wb |
Function my_arcsin(x As Double, Optional q As Integer = 0) As Double
Dim wb As Double
Select Case x
End Function
Case Is = 1: wb = c_pi / 2 Case Is = -1: wb = -c_pi / 2 Case Else wb = Atn(x / Sqr(-x * x + 1))
End SelectIf (q = 2 Or q = 3) Then wb = c_pi - wb
ElseIf q = 4 Then
wb = 2 * c_pi + wb
End Ifmy_arcsin = wb |