IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 5, 2005, 8:44:10 PM (21 years ago)
Author:
eugene
Message:

defined extrapolate / limited interpolation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.data/minterpolate.c

    r2598 r3674  
    33int minterp (int argc, char **argv) {
    44 
    5   int i, j, status, nx, ny, Nx, Ny;
     5  int i, j, status, nx, ny, Nx, Ny, N, Extrapolate;
     6  int ic, jc, dx, dy, Npix;
    67  char temp[1024];
    78  double scale, scale2, dX, dY;
    89  float *V00, *V01, *V10, *V11, *Vout, dV1, dV2, dV3;
     10  float *buf, I, J, x, y, xs, xe, ys, ye;
    911  Buffer *in, *out;
    1012
     13  /* choose the appropriate graphing window */
     14  Extrapolate = FALSE;
     15  if ((N = get_argument (argc, argv, "-extrapolate"))) {
     16    remove_argument (N, &argc, argv);
     17    Extrapolate = TRUE;
     18  }
     19
    1120  if (argc != 4) {
    12     fprintf (stderr, "USAGE: minterpolate <from> <to> scale \n");
     21    fprintf (stderr, "USAGE: minterpolate <from> <to> scale [-extrapolate]\n");
    1322    return (FALSE);
    1423  }
     
    6877  dX = dY = scale;
    6978
    70   {
     79  buf = (float *)in[0].matrix.buffer;
     80  Npix = 0;
    7181
    72     int dx, dy, Npix;
    73     float I, J, x, y, xs, xe, ys, ye;
    74 
    75     Npix = 0;
     82  if (Extrapolate) {
    7683    for (j = 0; j < Ny - 1; j++) {
    7784      for (i = 0; i < Nx - 1; i++) {
    78         V00 = (float *)(in[0].matrix.buffer) + j*Nx + i;
     85        V00 = buf + i + j*Nx;
    7986        V10 = V00 + 1;
    8087        V01 = V00 + Nx;
     
    8794        y = (j + 0.5) * scale;
    8895
    89         xs = 0;
    90         if (i == 0) { xs = -0.5*scale; }
    91         xe = scale;
    92         if (i == Nx - 2) { xe = 1.5*scale; }
     96        xs = ys = 0;
     97        xe = ye = scale;
    9398
    94         ys = 0;
    95         if (j == 0) { ys = -0.5*scale; }
    96         ye = scale;
    97         if (j == Ny - 2) { ye = 1.5*scale; }
     99        if (i == 0)      { xs = -0.5*scale; }
     100        if (i == Nx - 2) { xe =  1.5*scale; }
     101
     102        if (j == 0)      { ys = -0.5*scale; }
     103        if (j == Ny - 2) { ye =  1.5*scale; }
     104
     105        for (J = ys; J < ye; J += 1.0) {
     106          dx = (x + xs);
     107          dy = (y + J);
     108          Vout = (float *)(out[0].matrix.buffer) + dy*nx + dx;
     109          for (I = xs; I < xe; I += 1.0, Vout++) {
     110            *Vout = dV1 * (I*J) + dV2 * J + dV3 * I + *V00;
     111            Npix ++;
     112          }
     113        }
     114      }
     115    }
     116  } else {
     117     for (j = -1; j < Ny; j++) {
     118      for (i = -1; i < Nx; i++) {
     119        ic = MIN (MAX (i, 0), Nx-1);  /* we never actually reach Nx, Ny */
     120        jc = MIN (MAX (j, 0), Ny-1);
     121        V00 = buf + ic + jc*Nx;
     122        V10 = V00 + 1;
     123        V01 = V00 + Nx;
     124        V11 = V01 + 1;
     125
     126        if ((i == -1) || (i == Nx - 1)) { V10 = V00; } else { V10 = V00 + 1; }
     127        if ((j == -1) || (j == Ny - 1)) { V01 = V00; } else { V01 = V00 + Nx; }
     128        if ((i == -1) || (i == Nx - 1)) { V11 = V01; } else { V11 = V01 + 1; }
     129
     130        dV1 = (*V11 + *V00 - *V01 - *V10) / scale2;
     131        dV2 = (*V01 - *V00) / scale;
     132        dV3 = (*V10 - *V00) / scale;
     133
     134        x = (i + 0.5) * scale;
     135        y = (j + 0.5) * scale;
     136
     137        xs = ys = 0;
     138        xe = ye = scale;
     139
     140        if (i == -1)     { xs = 0.5*scale; }
     141        if (i == Nx - 1) { xe = 0.5*scale; }
     142
     143        if (j == -1)     { ys = 0.5*scale; }
     144        if (j == Ny - 1) { ye = 0.5*scale; }
    98145
    99146        for (J = ys; J < ye; J += 1.0) {
     
    109156    }
    110157  }
    111 
    112158  return (TRUE);
    113 
    114159}
    115 
Note: See TracChangeset for help on using the changeset viewer.