IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 25, 2021, 2:19:38 PM (5 years ago)
Author:
eugene
Message:

add MOL projection

Location:
branches/eam_branches/ipp-20211108/Ohana/src/libdvo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20211108/Ohana/src/libdvo/include/libdvo_astro.h

    r40291 r41966  
    2727  PROJ_PAR, // pseudocyl
    2828  PROJ_ZPN, // zenithal
     29  PROJ_MOL, // pseudocyl
    2930} OhanaProjection;
    3031
  • branches/eam_branches/ipp-20211108/Ohana/src/libdvo/src/coordops.c

    r39926 r41966  
    266266    switch (proj) {
    267267      case PROJ_AIT:
    268       Z2 = (1.0 - SQ(RAD_DEG*0.25*L) - SQ(RAD_DEG*0.5*M));
    269       if (Z2 < 0) return (FALSE);
    270       Z = sqrt (Z2);
    271       alpha = 2.0 * DEG_RAD * atan2 (RAD_DEG*0.5*Z*L, 2.0*Z2 - 1.0);
    272       delta = DEG_RAD * asin (RAD_DEG*M*Z);
    273       break;
    274      
     268        Z2 = (1.0 - SQ(RAD_DEG*0.25*L) - SQ(RAD_DEG*0.5*M));
     269        if (Z2 < 0) return (FALSE);
     270        Z = sqrt (Z2);
     271        alpha = 2.0 * DEG_RAD * atan2 (RAD_DEG*0.5*Z*L, 2.0*Z2 - 1.0);
     272        delta = DEG_RAD * asin (RAD_DEG*M*Z);
     273        break;
    275274      case PROJ_GLS:
    276275        /* L,M in degrees, alpha,delta in degrees */
     
    283282        delta = 3 * DEG_RAD * asin (M/180.0);
    284283        break;
     284      case PROJ_MOL:
     285        Z = sqrt(2.0 - SQ(RAD_DEG*M));
     286        alpha = M_PI*L/(2*Z);
     287        double T1 = asin(RAD_DEG*M*M_SQRT1_2)/90.0 + M*Z/180.0;
     288        delta = DEG_RAD*asin(T1);
    285289      default:
    286290        return (FALSE);
     
    448452        *M = 180.0 * sin (RAD_DEG*theta/3.0);
    449453        return (TRUE);
     454      case PROJ_MOL:
     455        phi = ra - coords[0].crval1;
     456        theta = dec - coords[0].crval2;
     457        // given theta, solve for gamma:
     458        double So = sin(theta*RAD_DEG);
     459        double Go = theta;
     460        if (theta > +80) { Go = theta - 10.0;}
     461        if (theta < -80) { Go = theta + 10.0;}
     462        for (int iter = 0; iter < 5; iter ++) {
     463          double Fo = (Go / 90.0) + sin(Go*M_PI/90.0) / M_PI - So;
     464          double dFdG = (1 / 90.0) + cos(Go*M_PI/90.0) / 90.0;
     465          Go -= Fo / dFdG;
     466        }
     467        *L = 2*phi * cos(RAD_DEG*Go) * M_SQRT2 / M_PI;
     468        *M = 180.0 * sin(RAD_DEG*Go) * M_SQRT2 / M_PI;
     469        return (TRUE);
    450470      default:
    451471        return (FALSE);
     
    10591079  if (!strncmp(&ctype[4], "-GLS", 4)) return PROJ_GLS;
    10601080  if (!strncmp(&ctype[4], "-PAR", 4)) return PROJ_PAR;
     1081  if (!strncmp(&ctype[4], "-MOL", 4)) return PROJ_MOL;
    10611082  return PROJ_NONE;
    10621083}
     
    10791100    case PROJ_GLS: strcpy(&ctype[4], "-GLS"); return TRUE;
    10801101    case PROJ_PAR: strcpy(&ctype[4], "-PAR"); return TRUE;
     1102    case PROJ_MOL: strcpy(&ctype[4], "-MOL"); return TRUE;
    10811103    case PROJ_NONE: return FALSE;
    10821104  }
     
    11031125    case PROJ_GLS:
    11041126    case PROJ_PAR:
     1127    case PROJ_MOL:
    11051128      return PROJ_MODE_PSEUDOCYL;
    11061129    default:
Note: See TracChangeset for help on using the changeset viewer.