IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5385


Ignore:
Timestamp:
Oct 19, 2005, 9:19:24 PM (21 years ago)
Author:
eugene
Message:

fixed error on handling of DIS images (box range) and improved image overlap test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/addstar/src/gimages.c

    r5328 r5385  
    11# include "addstar.h"
     2void SetImageCorners (double *X, double *Y, Image *image);
    23
    34/* given image, find catalog images which overlap it */
     
    89  Image *timage, *pimage;
    910  Coords tcoords;
    10   double r, d;
    11   double Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
     11  double r, d, x, y;
     12  double Xb[5], Yb[5], Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
    1213  double zeropt;
    1314
     
    5455
    5556  /* define original corners */
    56   Xo[0] = 0;           Yo[0] = 0;
    57   Xo[1] = image[0].NX; Yo[1] = 0;
    58   Xo[2] = image[0].NX; Yo[2] = image[0].NY;
    59   Xo[3] = 0;           Yo[3] = image[0].NY;
    60   Xo[4] = 0;           Yo[4] = 0;  /* so we can make a loop easily */
     57  SetImageCorners (Xo, Yo, &image[0]);
     58  Xo[4] = Xo[0]; Yo[4] = Yo[0];  /* so we can make a loop easily */
     59
    6160  for (j = 0; j < 5; j++) {
    6261    /* XY-to_RD is two-level if ctype == WRP */
     
    8281
    8382    addtolist = FALSE;
     83
    8484    /* define image corners */
    85     Xi[0] = 0;            Yi[0] = 0;
    86     Xi[1] = timage[i].NX; Yi[1] = 0;
    87     Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
    88     Xi[3] = 0;            Yi[3] = timage[i].NY;
    89     Xi[4] = 0;            Yi[4] = 0;  /* so we can make a loop easily */
     85    SetImageCorners (Xi, Yi, &timage[i]);
     86    Xi[4] = Xi[0]; Yi[4] = Yi[0];
    9087    /* transform to tcoords */
    9188    for (j = 0; j < 5; j++) {
     
    9491    }
    9592    /* check if any edges cross */
    96     /* not every robust - images must be close in size */
    9793    for (j = 0; (j < 4) && !addtolist; j++) {
    9894      for (k = 0; (k < 4) && !addtolist; k++) {
     
    10096      }
    10197    }
     98   
     99    /* note that 0,0 is a valid pixel for both DIS and !DIS */
     100    /* if no edges cross, check if 0,0 pixel of timage[i] is inside image[0] */
     101    SetImageCorners (Xb, Yb, &image[0]);
     102    if (!addtolist) {
     103      XY_to_RD (&r, &d, 0.0, 0.0, &timage[i].coords);
     104      RD_to_XY (&x, &y, r, d, &image[0].coords);
     105      addtolist = TRUE;
     106      addtolist &= (x < Xb[0]);
     107      addtolist &= (y < Yb[0]);
     108      addtolist &= (x > Xb[2]);
     109      addtolist &= (y > Yb[2]);
     110    }
     111
     112    /* if no edges cross, check if one corner of image[0] is inside timage[i] */
     113    SetImageCorners (Xb, Yb, &timage[i]);
     114    if (!addtolist) {
     115      XY_to_RD (&r, &d, 0.0, 0.0, &image[0].coords);
     116      RD_to_XY (&x, &y, r, d, &timage[i].coords);
     117      addtolist = TRUE;
     118      addtolist &= (x < Xb[0]);
     119      addtolist &= (y < Yb[0]);
     120      addtolist &= (x > Xb[2]);
     121      addtolist &= (y > Yb[2]);
     122    }
     123
    102124    if (addtolist) {
    103125      pimage[npimage] = timage[i];
     
    130152
    131153*/
     154
     155void SetImageCorners (double *X, double *Y, Image *image) {
     156
     157  if (!strcmp(&image[0].coords.ctype[4], "-DIS")) {
     158    X[0] = -0.5*image[0].NX; Y[0] = -0.5*image[0].NY;
     159    X[1] = +0.5*image[0].NX; Y[1] = -0.5*image[0].NY;
     160    X[2] = +0.5*image[0].NX; Y[2] = +0.5*image[0].NY;
     161    X[3] = -0.5*image[0].NX; Y[3] = +0.5*image[0].NY;
     162  } else {
     163    X[0] = 0;           Y[0] = 0;
     164    X[1] = image[0].NX; Y[1] = 0;
     165    X[2] = image[0].NX; Y[2] = image[0].NY;
     166    X[3] = 0;           Y[3] = image[0].NY;
     167  }
     168}
Note: See TracChangeset for help on using the changeset viewer.