; ; BOHEME STAR ; =========== ; ; Name: Boheme Star ; Quelle: Weiterentwicklung Berghaus Star ; http://www.progonos.com/furuti/MapProj/Normal/ProjInt/ProjStar/projStar.html ; Richtung: Direkt-Transformation ; ; Der Boheme Star ist ein derart modifizierter Berghaus, dass ; ; a) statt des Äquators so, wie beim Bartholomew Star, ein frei wählbarer Grenzparallel ; gewählt werden kann (Bartholomew: 25.3 Grad) und ; b) die Meridiane stetig, d. h. knickfrei verlaufen. Hierzu wirs "Ab Grenzparallel" ; ein im Breitenwinkel linear reduzierter Bonne gerechnet. ; ; Ein Netz, von lediglich akademischem Wert. ; ; 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 Boheme~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 _var Grenzbreite ; ; Konstanten ; _var 2pi ; _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,~Bartholomew:~3) input Grenzbreite Grenzbreite~(Pseudo-Äquator)~in~Grad~(-90~...~90,~Bartholomew:~23.5) input lambda0 Mittelpunktslänge~in~Grad ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 clip Sternspitzenzahl 3 3600 clip Grenzbreite -89.9999 89.9999 clip lambda0 -180 180 ; In Bogenmaß mul Grenzbreite °( mov r4 Grenzbreite ; r4: Reduktionsquotient Grenzparallel - Äquator div r4 pi/2 add r4 1 ; mov 2pi pi mul 2pi 2 ; 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 ... ; - - - - - - - - - - - - - - - - - - - ; cmplt phi Grenzbreite south north: mov alpha lambda jump go south: mov r0 pi/2 ; 90 ... -90 add r0 phi ; --> 0 ... 180 div r0 r4 ; --> 0 ... 240 sin r0 ; sin(Grenzbreite) --> 1 mov alpha lambda mul alpha r0 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