1 /* 2 ** libproj -- library of cartographic projections 3 ** 4 ** Copyright (c) 2003, 2006 Gerald I. Evenden 5 */ 6 static const char 7 LIBPROJ_ID[] = "Id"; 8 /* 9 ** Permission is hereby granted, free of charge, to any person obtaining 10 ** a copy of this software and associated documentation files (the 11 ** "Software"), to deal in the Software without restriction, including 12 ** without limitation the rights to use, copy, modify, merge, publish, 13 ** distribute, sublicense, and/or sell copies of the Software, and to 14 ** permit persons to whom the Software is furnished to do so, subject to 15 ** the following conditions: 16 ** 17 ** The above copyright notice and this permission notice shall be 18 ** included in all copies or substantial portions of the Software. 19 ** 20 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 24 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 25 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 26 ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 */ 28 #define PROJ_PARMS__ \ 29 double cosphi1; 30 #define PROJ_LIB__ 31 # include <lib_proj.h> 32 PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; 33 #define MAX_ITER 10 34 #define LOOP_TOL 1e-7 35 #define TWO_D_PI 0.636619772367581343 36 FORWARD(s_forward); /* spheroid */ 37 double k, V; 38 int i; 39 40 xy.y = lp.phi * TWO_D_PI; 41 k = PI * sin(lp.phi); 42 lp.phi *= 1.8; 43 for (i = MAX_ITER; i ; --i) { 44 lp.phi -= V = (lp.phi + sin(lp.phi) - k) / 45 (1. + cos(lp.phi)); 46 if (fabs(V) < LOOP_TOL) 47 break; 48 } 49 if (!i) 50 lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; 51 else 52 lp.phi *= 0.5; 53 xy.x = 0.5 * lp.lam * (cos(lp.phi) + P->cosphi1); 54 xy.y = FORTPI * (sin(lp.phi) + xy.y); 55 return (xy); 56 } 57 FREEUP; if (P) free(P); } 58 ENTRY0(wink2) 59 P->cosphi1 = cos(proj_param(P->params, "rlat_1").f); 60 P->es = 0.; P->inv = 0; P->fwd = s_forward; 61 ENDENTRY(P) 62 /* 63 ** Log: proj_wink2.c 64 ** Revision 3.1 2006/01/11 01:38:18 gie 65 ** Initial 66 ** 67 */ 68