Winkelfunktionen

Spezielle Probleme trigonometrischer Funktionen und Algorithmen

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 Links zum Thema 'Algorithmen'

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-Differenz

Ein Winkel ist ein relatives Maß für die Differenz zwischen 2 Richtungs-Angaben. Allerdings werden nur selten beide Richtungen angegeben:

Null-Winkel

Meist 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-Richtung

Man 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ß-Einheiten

Es 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-Werte

Viele 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 & Kartografie

Viele 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 !

3D

Bei 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
grad(x) = rad(x) / pi * 180
Bessere Taschenrechner erlauben die Umschaltung zwischen Grad- und Bogenmaß.
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
grad(x) = ra(x) * 15
Dieses Maß wird teilweise auch in der militärischen Orientierung ('Richtung 10 Uhr') eingesetzt.

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.

Null-Richtung und Zähl-Richtung

Null-Richtung

Ein Winkel ist ein relatives Maß (z.B. zwischen 2 Geraden).
Leider wird oft nur 1 Bezugs-Element angegeben: In diesen Fällen ist der Winkel relativ zu einer Null-Richtung gemeint, die nicht immer selbstverständlich ist.
Die Null-Richtung unterscheidet sich je nach Wissenschaft und Arbeits-Gebiet ! Sie wird leider fast nie angegeben und im schlimmsten Fall darüber hinaus sogar gewechselt.

Zähl-Richtung

Jeder Winkel lässt sich entweder in Richtung des Uhrzeigers oder entgegengesetzt angeben.

Bildverarbeitung

Eine häufige Fehlerquelle ist die Tatsache, dass die Y-Achse in der Bildverarbeitung vom Ursprung (linke obere Ecka) nach unten wächst und nicht nach oben wie bei fast allen anderen Anwendungen (und Formeln).
Typische Probleme ergeben sich bei deer Umrechnung von XY-Kooridnaten in Winkel und umgekehrt.

Innerhalb einer Wissenschaft oder eines Arbeits-Gebiets gelten meist (aber nicht immer) einheitliche Regeln. Diese werden leider als selbstverständlich vorausgesetzt und daher fast nie angegeben.
Bei der Anwendung von Formeln oder Algorithmen ergeben sich je nach den angenommenen Regeln erhebliche Unterschiede - Die Formeln müssen je nach Anwendung adaptiert werden !

In der ebenen Geometrie (und in den meisten Formel-Sammlungen) ist der Winkel 0° meist nach rechts orientiert und wächst entgegen der Richtung des Uhrzeigers.
In allen praktischen Anwendungen (Orientierung, Kartografie, Astronomie, ...) ist der Winkel 0° nach Nord orientiert und wächst in Richtung des Uhrzeigers.

Periode

Periode

Beim Durchlaufen eines vollen Kreises nimmt der Betrag (Wert) eines Winkels (z.B. in Grad) kontinuiertlich zu und ist immer eindeutig.

Die Werte der Winkelfunktionen sind für einen Kreis-Umlauf nicht eindeutig: sin,cos ergeben je 2mal die gleichen Werte, tan,ctg je 4mal.

Das wirkt sich bei der Umkehrung der Winkelfunktionen unangenehm aus:

Funktionen wie arcsin, arccos, arctan, arcctg ergeben rechnerisch nur 1 Ergebnis, praktisch jedoch 2 bzw. 4 Ergebnisse.
In der Geometrie spielt das keine Rolle, weil man in dieser Wissenschaft Gerade und Ebenen als unendlich ausgedehnt, ohne besondere Vorzugs-Richtung betrachtet.
Beispiel: Eine Gerade
y = k * x + d
mit 45° Steigung ist identisch mit 225° Steigung, da
k = tan(45°) = tan(225°) = 1
in beiden Fällen gleich groß ist.
In allen praktischen Anwendungen besteht jedoch ein erheblicher Unterschied zwischen den Richtungen Nordost (NO) und Südwest (SW).
Man muss daher entweder 2 (4) Ergebnisse berücksichtigen oder mit Hilfe zusätzlicher Angaben (Quadrant) eines der Ergebnisse auswählen.
Dieser Hinweis fehlt in den meisten Formel-Sammlungen ...

Negative Winkel, Vollkreis-Überschreitung

Vollkreis-Überschreitung

Wenn 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.

Vereinfachung

Im allgemeinen Fall ist
w = w + 360° = w - 360°
Zur Vermeidung unangenehmer Werte-Bereiche ist daher in vielen Algorithmen eine Vereinfachung enthalten:
if (winkel>360) {winkel = winkel - 360}
else if(winkel<0) {winkel = winkel + 360}
oder besser (und im Bogenmaß):
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 Kartografie

Auf 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.

Sonderfälle

Sonderfälle

Viele Algorithmen mit Winkelfunktionen ergeben unter speziellen Bedingungen Fehler-Werte.
Man muss die Sonderfälle in eigenen Programmen erkennen, abfangen und gesondert behandeln.

Dafür lassen sich keine verbindlichen Regeln angeben, da die Reaktion eines Programms je nach Anwendung unterschiedlich ausfallen muss.

Tipp: Testen sie (auch in Zwischen-Ergebnissen) immer die verdächtigen Winkel 0°, 90°, 180°, 270°, 360°
Beispiel:
Der Richtungswinkel (Heading) für die Bewegung vom Punkt A(x1,y1) nach B(x2,y2) ist zu berechnen.
Als Referenz gilt die Nord-Richtung mit w=0
w = arctan( (x2-x1) / (y2-y1) )
Das Ergebnis wird immer im Bogenmaß berechnet, d.h. man muss den Winkel bei Bedarf in Grad umrechnen:
w[grad] = w / Pi * 180

Die Formel funktioniert nur für den 1.Quadranten (Nordost) bzw. x2>=x1 und y2>y1

In den Fällen Ost und West (y2=y1) ergibt die Formel Fehler-Werte. Ein guter Algorithmus muss diese Fälle erkennen und darf sie nicht mit der angegebenen Formel berechnen, sondern muss für x2>x1 den Wert w=Pi/2 (Ost) und für x2<x1 den Wert w=3*Pi/2 (West) zurückgeben.
Unabhängig davon muss man selbst entscheiden, was der Algorithmus bei Identität (x2=x1; y2=y1) zurückgeben soll.

Im 2. und 3. Quadranten (Südost und Südwest, y2<y1) kann man den Winkel mit der Formel berechnen, muss das Ergebnis jedcoh um +Pi korrigieren.

Im 4. Quadranten (Nordwest, x2<x1; y2>y1) kann man ebenfalls mit der Formel rechnen, muss das Ergebnis jedoch um +2*Pi korrigieren.

Das Beispiel demonstriert recht deutlich den Unterschied zwischen Lehrbuch und Informatik-Praxis: Ein brauchbarer Algorithmus muss natürlich für alle Richtungen fehlerfrei funktionieren...

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)
arcctg(x) = arctan(x) + 2 * arctan(1)
arcsin(x) = arctan(x / sqrt(-x * x + 1))
arctan - wird oft auch mit atn bezeichnet !
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-Entwicklung

Wenn 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 Pi

Visual 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)
my_pi = 4 * Atn(1)
'...
End Function

Himmelsrichtung

Diese 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")
i = CInt(Round(wg / 45, 0))
grad_to_hiri = CStr(hr(i))
End Function

ArcusSinus und ArcusCosinus

Programmierung 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
Case Is = 1:   wb = 0
Case Is = -1:   wb = pi
Case Else
wb = Atn(-x / Sqr(-x * x + 1)) + c_pi / 2
End Select
If (q = 3 Or q = 4) Then wb = 2 * c_pi - wb
my_arccos = wb
End Function
Function my_arcsin(x As Double, Optional q As Integer = 0) As Double
Dim wb As Double
Select Case x
Case Is = 1:   wb = c_pi / 2
Case Is = -1:   wb = -c_pi / 2
Case Else
wb = Atn(x / Sqr(-x * x + 1))
End Select
If (q = 2 Or q = 3) Then
wb = c_pi - wb
ElseIf q = 4 Then
wb = 2 * c_pi + wb
End If
my_arcsin = wb
End Function

XHTML CSS