; ; GOODE HOMOLOSINE ; ================ ; ; Name: Goode Homolosine ; Autor: Goode (wohl 1923) ; Quelle: G I Evenden: Libproj4 Preliminary Draft March 2005 ; Richtung: Direkt ; ; Der Name Goode sollte nicht, wie bei flüchtiger Betrachtung möglich, mit einem ; etwa "Goodeschen Kartennetzentwurf" verbunden werden. Vielmehr stammen von J. P. Goode zwei ; voneinander unabhängige Ideen: ; ; 1. in einem Weltkartenetz Verzerrungen z. B. in Kontinenten durch ozeanische Klaffungen zu mildern, ; 2. das Weltkartennetz Homolosine, welches einen Mollweide und einen Mercator-Sanson zusammensetzt. ; ; Dieses Programm rechnet einen Goode Homolosine, realisiert also Idee 2. ; ; Maßstab und Berührungsparallel werden abgefragt. ; Die Zielbildgeometrie wird dem Sekundäroperanden oder einem Fixbild entnommen. ; ; Literatur: ; Goode, J. P.: The Homolosine Projection - A new device for portraying the Earth's surface ; entire. Ann. of. the Ass. of Am. Geogr., 15 (3), p.119-25. (1925) ; (Das ABC Kartenkunde gibt die Jahreszahl 1923 an.) ; ; (C) Rolf Böhm 2006 ; Variables ; ========= ; ; Co-ords ; _name Goode~Homolosine _var phi ; Geographische Breite _var lambda ; Geographische Länge _var delta ; Poldistanz/geographisch, auch Schiefdistanz _var psi ; Parameter Psi _var oldphi ; The last phi _var Cx _var Cy _var Cp _var psi0 _var p ; Newton-Raphson-Iteration: 0th derivative _var p' ; Newton-Raphson-Iteration: 1th derivative _var v ; psi Increment (p/p') "Verbesserung" _var i ; Iteration Counter _var 40.73° ; 40.73333333° _var -40.73° _var t1 ; Temp register ; ; COnstants ; _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var lambda0 ; Geogr. Länge des Bildmittelpunktes ; ; x, y, x', y', Cx', Cy', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisation ; ============== ; 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 lambda0 Mittelpunktslänge~in~Grad ; Clip the input values clip scale 1 1E12 clip lambda0 -180 180 ; Constants mov Cx 2 root Cx 2 mul Cx 2 div Cx pi mov Cy 2 root Cy 2 mov Cp pi ; Newton Raphson Iteration Constant mov 40.73° 40.733333333 mul 40.73° °( mov -40.73° 40.73° neg -40.73° ; Is init mov initial 1 077$: ; ; SIMD-Area ; ========= ; ; Lambda and Phi ; -------------- ; 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 ; ; Into Arc ; -------- ; mul phi °( mul lambda °( ; ; Mercator-Sanson ; --------------- ; mov t1 phi cos t1 mul t1 lambda mov x t1 mov y phi ; ; Decision: Mercator-Sanson or Mollweide ; -------------------------------------- ; cmpgt phi 40.73° $1001 ; gt: Mollweide cmplt phi -40.73° $1001 ; lt: Mollweide jump $1003 ; goto Mercator-Sanson $1001: ; Mollweide ; --------- ; ; psi - Newton-Raphson-Iteration: While Increment v < 1e-12 and no timeout ; cmpeq oldphi phi 1030$ ; Only 1 x per line mov psi phi ; Start psi is phi clr i ; Iteration counter mov oldphi phi 1010$: inc i ; New cycle cmpgt i 1000 1030$ ; Timeout clr p ; 0th derivative: mov r2 psi mul r2 2 add p r2 ; 2psi + ... mov r3 psi mul r3 2 sin r3 add p r3 ; sin(2psi) + ... mov r4 phi sin r4 mul r4 Cp sub p r4 ; Cp*sin(phi) clr p' ; 1th derivative mov r5 2 add p' r5 ; 2 + ... mov r6 psi mul r6 2 cos r6 mul r6 2 add p' r6 ; 2cos(2psi) mov v p div v p' ; v = p/p' ; sub psi v ; New -- better -- psi ; mov r7 v ; Compute error abs r7 cmpgt r7 1e-12 1010$ ; If abs(v) lt 1e-12 new Iteration 1030$: ; x ; mov x psi cos x mul x lambda mul x Cx ; ; y ; mov y psi sin y mul y Cy ; ; The y join ; mov r3 y sgn r3 abs y sub y 0.05280 mul y r3 $1003: ; Scale, Map centre etc. ; ---------------------- ; mul x Rx' ; Erdradius div x scale ; Kartenmaßstab add x Cx' mul y Ry' div y scale add y Cy' ; ; Finale ; ------ ; 111$: mov x' x mov y' y ; mov x' psi ; mov y' i exit _end