Annotation of researchv10no/cmd/map/libmap/perspective.c, revision 1.1.1.1

1.1       root        1: #include "map.h"
                      2: 
                      3: #define ORTHRAD 1000
                      4: static double viewpt;
                      5: 
                      6: static int
                      7: Xperspective(struct place *place, double *x, double *y)
                      8: {
                      9:        double r;
                     10:        if(viewpt<=1+FUZZ && fabs(place->nlat.s<=viewpt+.01))
                     11:                return(-1);
                     12:        r = place->nlat.c*(viewpt - 1.)/(viewpt - place->nlat.s);
                     13:        *x = - r*place->wlon.s;
                     14:        *y = - r*place->wlon.c;
                     15:        if(r>4.)
                     16:                return(-1);
                     17:        if(fabs(viewpt)>1 && place->nlat.s<1/viewpt ||
                     18:           fabs(viewpt)<=1 && place->nlat.s<viewpt)
                     19:                        return 0;
                     20:        return(1);
                     21: }
                     22: 
                     23: proj
                     24: perspective(double radius)
                     25: {
                     26:        viewpt = radius;
                     27:        if(viewpt >= ORTHRAD)
                     28:                return(Xorthographic);
                     29:        if(fabs(viewpt-1.)<.0001)
                     30:                return(0);
                     31:        return(Xperspective);
                     32: }
                     33: 
                     34:        /* called from various conformal projections,
                     35:            but not from stereographic itself */
                     36: int
                     37: Xstereographic(struct place *place, double *x, double *y)
                     38: {
                     39:        double v = viewpt;
                     40:        int retval;
                     41:        viewpt = -1;
                     42:        retval = Xperspective(place, x, y);
                     43:        viewpt = v;
                     44:        return retval;
                     45: }
                     46: 
                     47: proj
                     48: stereographic(void)
                     49: {
                     50:        viewpt = -1.;
                     51:        return(Xperspective);
                     52: }
                     53: 
                     54: proj
                     55: gnomonic(void)
                     56: {
                     57:        viewpt = 0.;
                     58:        return(Xperspective);
                     59: }
                     60: 
                     61: int
                     62: plimb(double *lat, double *lon, double res)
                     63: {
                     64:        static first = 1;
                     65:        if(viewpt >= ORTHRAD)
                     66:                return olimb(lat, lon, res);
                     67:        if(first) {
                     68:                first = 0;
                     69:                *lon = -180;
                     70:                if(fabs(viewpt) < .01)
                     71:                        *lat = 0;
                     72:                else if(fabs(viewpt)<=1)
                     73:                        *lat = asin(viewpt)/RAD;
                     74:                else
                     75:                        *lat = asin(1/viewpt)/RAD;
                     76:        } else
                     77:                *lon += res;
                     78:        if(*lon <= 180)
                     79:                return 1;
                     80:        first = 1;
                     81:        return -1;
                     82: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.