; ; WINKEL-TRIPEL ; ============= ; ; Nr. bei Wagner: 24 ; Name: Winkelscher Entwurf ; Quelle: Karlheinz Wagner, Kartographische Netzentwürfe, Leipzig 1949, S. 224ff. ; Richtung: Inverse Transformation ; ; 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. ; ; Maßstab und Mittelmeridian werden abgefragt. ; Die Zielbildgeometrie wird dem Sekundäroperanden oder einem Fixbild entnommen. ; Der Bildmittelpubnt wird bildmittig gesetzt. ; ; Sogenannte Evenden-Brunner-Iteration (Newton-Raphson-Iteration nach G. I. Evenden und J. Brunner). ; ; - Entwicklungsstelle lambda=0°, phi=0.625° ; - Iterationsabbruch bei Epsilon 1E-9. ; - Iterationsabbruch nach 15 Iterationen auch bei Nichterreichen des Epsilon. ; ; Literatur: ; Wagner: Kartographische Netzentwürfe, Leipzig: Bibliographisches Institut 1949 ; Fiala: Mathematische Kartographie, Berlin: Verlag Technik 1957 ; Evenden, G. I.: Libproj.4 November 22, 2008. http://home.comcast.net/~gevenden56/proj/manual.pdf. ; Brunner, Jakob, Luzern: Visual Basic Code 2010 (unveröffentlicht). ; (C) Jakob Brunner, Rolf Böhm, 2010 ; Benutzte Variablen ; ================== ; ; Die Variablennamen sind den Wagner- und Brunner-Maunskripten entnommen. ; ; Konstanten ; mov IEPS 0.000000001 ; epsilon für Iterationaabbruch mov IMAX 15 ; Maximale Iterationsanzahl mov ILAM 0 ; Lambda Entwicklungsstelle mul ILAM °( mov IPHI 0.625 ; Phi Entwicklungsstelle mul IPHI °( ; ; Laufende Koordinaten ; _name Winkel~Tripel~(Evenden-Brunner-Iteration) _var phi ; Geographische Breite _var phi*2 ; wie der Name sagt _var lambda ; Geographische Länge _var lambda/2 ; wie der Name sagt _var n ; Cos(40°) _var cosphi0 ; ebenfalls _var sinlambda ; _var coslambda ; gibts nicht _var sinlambda/2 _var coslambda/2 _var sinphi _var cosphi _var sinphi*2 ; _var cosphi*2 ; gibts auch nicht _var sinlambda/2² _var coslambda/2² _var sinphi² _var cosphi² _var C _var D ; Wagners Delta _var \/C ; Wurzel aus C _var 2\/C3 ; C hoch 3/2 oder Wurzel aus C³ _var f1 ; Verbesserungsfunktionen _var f2 _var dp1 ; Differentiale _var dl1 _var dp2 _var dl2 ; ; Konstanten der Transformation ; _var lambda0 ; Geogr. Länge des Bildmittelpunktes _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) ; ; x, y, x', y', Cx', Cy', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial 077$ ; Dialog input scale Winkel~Tripel~(Evenden-Brunner-Iteration)\\Maßstabszahl input lambda0 Mittelpunktslänge~in~Grad ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 clip lambda0 -180 180 ; Konstanten berechnen mov n 40 mul n °( cos n ; Cos(40°) mov cosphi0 n ; zur besseren Erläuterung ; Programm ist initialisiert mov initial 1 077$: ; ; SIMD-Laufbereich ; ================ ; ; Maßstab, Kartenmittelpunkt etc. einrechnen ; ------------------------------------------ sub x Cx' ; Bildmittelpunkt div x Rx' ; Erdradius mul x scale ; Kartenmaßstab sub y Cy' div y Ry' mul y scale ; ; Eigentlicher Entwurf, dieser invers ; ----------------------------------- ; ; Iterationsschleifeninitialisierung ; clr i mov lambda ILAM mov phi IPHI 191$: ; Vorab mov sinlambda lambda sin sinlambda mov lambda/2 lambda div lambda/2 2 mov sinlambda/2 lambda/2 sin sinlambda/2 mov coslambda/2 lambda/2 cos coslambda/2 mov sinphi phi sin sinphi mov cosphi phi cos cosphi mov phi*2 phi mul phi*2 2 mov sinphi*2 phi*2 sin sinphi*2 mov sinphi² sinphi power sinphi² 2 mov cosphi² cosphi power cosphi² 2 mov sinlambda/2² sinlambda/2 power sinlambda/2² 2 mov coslambda/2² coslambda/2 power coslambda/2² 2 ; D: Wagners delta, Brunner: dD mov D cosphi mul D coslambda/2 acos D ; C: Evendens formula 7.60, Brunner: dC mov r0 cosphi mul r0 cosphi mul r0 coslambda/2 mul r0 coslambda/2 mov C 1 sub C r0 tstne C 195$ mov 0.00000000001 C 195$: mov \/C C ; Das steht nicht in dC, wird aber dauernd gebraucht werden ... root \/C 2 mov 2\/C3 C power 2\/C3 1.5 ; Brunners Verbesserungsfunktion f1 mov f1 sinlambda/2 ; Aïtoff mul f1 cosphi mul f1 D mul f1 2 div f1 \/C mov r0 lambda ; Plattkarte mul r0 cosphi0 add f1 r0 div f1 2 sub f1 x ; Brunners Verbesserungsfunktion f2 mov f2 sinphi ; Aïtoff mul f2 D div f2 \/C add f2 phi ; Plattkarte div f2 2 sub f2 y ; Abbruch, wenn Verbesserungen (fast) Null mov r0 f1 abs r0 cmplt r0 IEPS 193$ ; Standardwert 1E-7 entspricht 0.637 m mov r0 f2 abs r0 cmplt r0 IEPS 193$ ; Standardwert 1E-7 entspricht 0.637 m ; dx/dl: Brunner dp1 mov r0 sinlambda mul r0 sinphi*2 mov r4 C mul r4 4 div r0 r4 mov r1 D mul r1 sinphi mul r1 sinlambda/2 div r1 2\/C3 mov dp1 r0 sub dp1 r1 ; dx/dl: Brunner dL1 mov r0 cosphi² mul r0 sinlambda/2² div r0 C mov r1 D mul r1 cosphi mul r1 coslambda/2 mul r1 sinphi² div r1 2\/C3 mov r2 cosphi0 mov dl1 r0 add dl1 r1 add dl1 r2 mul dl1 0.5 ; dy/dp: Brunner dP2 mov r0 sinphi² mul r0 coslambda/2 div r0 C mov r1 D mov r7 1 sub r7 coslambda/2² mul r1 r7 mul r1 cosphi div r1 2\/C3 mov r2 1 mov dp2 r0 add dp2 r1 add dp2 r2 mul dp2 0.5 ; dy/dl: Brunner dL2 mov r0 sinphi*2 mul r0 sinlambda/2 div r0 C mov r1 D mul r1 sinphi mul r1 cosphi² mul r1 sinlambda div r1 2\/C3 mov r8 r0 add r8 r1 mul r8 8 tstne r8 189$ mov r8 0.00000000001 189$: mov dl2 1 div dl2 r8 ; Denominator mov r2 dp1 mul r2 dl2 mov r3 dp2 mul r3 dl1 sub r2 r3 ; Phi verbessern mov r0 f1 mul r0 dl2 mov r1 f2 mul r1 dl1 sub r0 r1 div r0 r2 ; Denominator sub phi r0 ; Lambda verbessern mov r0 f2 mul r0 dp1 mov r1 f1 mul r1 dp2 sub r0 r1 div r0 r2 ; Denomiator sub lambda r0 ; Iterationsschleifenende inc i cmplt i IMAX 191$ 193$: ; ; In Gradmaß umrechnen und Ausserhalbtest ; --------------------------------------- mul phi (° mul lambda (° cmplt phi -90 out cmpgt phi 90 out cmplt lambda -180 out cmpgt lambda 180 out ; ; Schlussarbeiten ; --------------- ; mov x' lambda mov y' phi ; Lambda um lambda0 kreisen lassen add x' lambda0 cmod x' -180 180 exit out: mov x' -9999 mov y' -9999 exit _end