; ; BERGHAUS STAR ; ============= ; ; Name: Berghaus Star ; Quelle: Allgemein bekannt, u. a. sind im Bertin (Graphische Semiolgie) ; unerwartetermaßen einige schöne "Berghaus-Sterne" ; Richtung: Direkt-Transformation ; ; Der Berghaus Star ist ein polständiger abstandstreuer Azimutalentwurf mit ; Südhemisphärenabbildung in Sternform. Der Südpol existiert mehrfach als ; Punktmenge von Sternspitzen. Die Meridiane knicken im Äquator und laufen dann ; südwärts jeweils ihrem nächsten Sternspitzensüdpol zu. ; ; Das Programm erlaubt Südpolanzahlen von 3 bis 3600. ; ; *) Die beiden mit *) gekennzeichneten Befehle sorgen dafür, dass der Stern nicht ; auf der Spitze steht, sondern auf "2 Zacken". ; ; Das Programm übernimmt die Koordinaten eines Punktes (x/y) und transformiert ; diese in einen Punkt (x'/y'). ; ; x/y sind ebene Zielpunktkoordinaten, x'/y' geben die geogr. Breite und Länge ; der Position auf der Quell-Erdkugel, auf der der Zielpunkt gelesen werden ; kann. ; Eigenentwicklung ; (C) Dr.-Ing. Rolf Böhm 2006 ; Benutzte Variablen ; ================== ; ; Laufende Koordinaten ; _name Berghaus~Star _var phi ; Geographische Breite _var lambda ; Geographische Länge _var alpha ; Polarkoordinatenazimut _var m ; Polarkoordinatenradius ; ; Konstanten der Transformation ; _var lambda0 ; Geogr. Länge des Bildmittelpunktes _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var Sternspitzenzahl ; ; Dreiecksberechnung (Es werden 2 Dreiecke berechnet, NP-KP-SP und NP-PP-SP). ZUM VERSTÄNDNIS AUFMALEN! ; ; NP: Nordpol, Mittelpunkt ; SP: Südpol, typisch etwa 5 Sternspitzen im Abstand 2 R = M um N ; KP: Knickpunkt, Punkt in dem der Meridian auf dem Äquator knickt ; LP: Lotfußpunkt des KP auf den Mittelmeridian (nich benutzt) ; PP: Neupunkt. Gesuchter Kartenpunkt ; _var gamma ; Winkel im Südpol PP-SP-NP _var beta ; Winkel im Neupunkt NP-PP-SP _var D ; Distanz, Kartenstrecke PP-NP, (identisch mit m) _var R ; Radius, Kartenstrecke NP-Äquator _var M ; Mittelmeridian, Kartenstrecke NP-SP (ungeknickt, = 2 R) _var H ; "Hypothenuse", Kartenstrecke KP-SP (Hypothenuse im Dreieck SP-KP-LP) ; ; Konstanten ; _var -pi _var -pi/2 _var 2pi _var 2R _var R² _var M² _var 2RM _var cosl _var sinl ; _var s-phase ; Phasenlage des Mittelmeridians des aktuellen Segments _var s-off ; Restwinkel zwischen s-phase und aktueller Länge _var s-width ; Segmentbreite _var s-halfw ; Halbe Segmentbreits ; ; x, y, x', y', Cx', Cy', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial 077$ ; Dialog pause Hinweis:~Dieses~Programm~rechnet~eine~Vorwärtstransformation.\\Es~muss~mit~einer~direkt~arbeitenden~Projection~engine~abgearbeitet~werden. input scale Maßstabszahl input Sternspitzenzahl Anzahl~der~Sternspitzen~(3~...~3600,~Standard:~8) tstne Sternspitzenzahl $555 mov Sternspitzenzahl 8 $555: input lambda0 Mittelpunktslänge~in~Grad ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 clip Sternspitzenzahl 3 3600 clip lambda0 -180 180 ; mov -pi pi neg -pi mov -pi/2 pi/2 neg -pi/2 mov 2pi pi mul 2pi 2 mov R -pi/2 mov M -pi mov 2R R mul 2R 2 ; 2R mov R² R power R² 2 ; R² mov M² M power M² 2 ; M² mov 2RM 2 mul 2RM R mul 2RM M ; 2RM ; Segmentierung vorbereiten mov s-width pi mul s-width 2 div s-width Sternspitzenzahl mov s-halfw s-width div s-halfw 2 ; Programm ist initialisiert mov initial 1 077$: ; ; SIMD-Laufbereich ; ================ ; ; Koordinaten übernehmen ; ---------------------- ; mov lambda x ; Geographische Länge mov phi y ; Geographische Breite sub lambda lambda0 cmod lambda -180 180 ; x, y haben eine Doppelbedeutung: ; - einmal die verdefinierten RTA-Input-Koordinaten, also eigentlich Phi und Lambda, ; - dann aber auch die ebenen Kartenkoordinaten, die errechnet werden ; ; Umrechnung in Bogenmaß ; ---------------------- ; mul phi °( mul lambda °( ; ; Segmentierung ; ------------- ; sub lambda s-halfw ; Verdrehung um 1/2 Zacken *) mov s-phase lambda ; Phase (des Zackens) ist Ganzzahlteil add s-phase 2pi ; das vermeidet negative Winkel add s-phase s-halfw ; So rundet der fix: -0.5 ... 0.5 -> 0 ... 1 div s-phase s-width ; Normalisieren fix s-phase ; Ganzteil mul s-phase s-width ; Denormalisieren mov s-off lambda ; Restwinkel (im Zacken) ist gebrochener Teil add s-off 2pi ; das vermeidet negative Winkel add s-off s-halfw ; So rundet der frac: -0.5 ... 0.5 -> 0 ... 1 div s-off s-width ; Normalisieren frac s-off ; Bruchteil mul s-off s-width ; Denormalisieren mov lambda s-off ; Restwinkel ist neues Lambda sub lambda s-halfw ; (0 ... 1 -> -0.5 ... 0.5) ; ; Netzentwurf rechnen ; ------------------- ; ; phi ... ganz einfach ... ; - - - - - - - - - - - - - ; mov m pi/2 sub m phi ; ; lambda ... N und S unterscheiden ... ; - - - - - - - - - - - - - - - - - - - ; tstlt phi south north: mov alpha lambda jump go south: mov cosl lambda cos cosl mov sinl lambda sin sinl ; Strecke H im Dreieck KP-SP-NP (Kosinussatz) mov H R² add H M² mov r0 2RM mul r0 cosl sub H r0 root H 2 ; Winkel gamma im Dreieck KP-SP-NP (Sinussatz) mov gamma sinl mul gamma R div gamma H asin gamma ; Nun ins Dreieck PP-NP-SP: Winkel alpha (Schiefes Dreieck Seite-Seite-Winkel) mov r0 gamma sin r0 mul r0 2R div r0 m ; "div r0 D" asin r0 mov beta r0 mov alpha pi sub alpha beta sub alpha gamma neg alpha ; ist aus irgendeinem Grund gespieglt sub alpha pi ; und 180 Grad verdreht go: ; Abschlussdrehungen add alpha s-phase ; Phasenverdrehung add alpha s-halfw ; Zurückdrehung um 1/2 Zacken *) sub alpha pi/2 ; Restfehler 90 Grad korrigieren ; ; Polarkoordinaten in kartesische Koordinaten umrechnen ; ----------------------------------------------------- ; mov x alpha cos x mul x m mov y alpha sin y mul y m ; ; Maßstab, Kartenmittelpunkt etc. einrechnen ; ------------------------------------------ ; mul x Rx' ; Erdradius div x scale ; Kartenmaßstab add x Cx' mul y Ry' div y scale add y Cy' ; ; Schlussarbeiten ; --------------- ; mov x' x mov y' y exit _end