Changeset 3674 for trunk/Ohana/src/opihi/cmd.data
- Timestamp:
- Apr 5, 2005, 8:44:10 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/minterpolate.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/minterpolate.c
r2598 r3674 3 3 int minterp (int argc, char **argv) { 4 4 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; 6 7 char temp[1024]; 7 8 double scale, scale2, dX, dY; 8 9 float *V00, *V01, *V10, *V11, *Vout, dV1, dV2, dV3; 10 float *buf, I, J, x, y, xs, xe, ys, ye; 9 11 Buffer *in, *out; 10 12 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 11 20 if (argc != 4) { 12 fprintf (stderr, "USAGE: minterpolate <from> <to> scale \n");21 fprintf (stderr, "USAGE: minterpolate <from> <to> scale [-extrapolate]\n"); 13 22 return (FALSE); 14 23 } … … 68 77 dX = dY = scale; 69 78 70 { 79 buf = (float *)in[0].matrix.buffer; 80 Npix = 0; 71 81 72 int dx, dy, Npix; 73 float I, J, x, y, xs, xe, ys, ye; 74 75 Npix = 0; 82 if (Extrapolate) { 76 83 for (j = 0; j < Ny - 1; j++) { 77 84 for (i = 0; i < Nx - 1; i++) { 78 V00 = (float *)(in[0].matrix.buffer) + j*Nx + i;85 V00 = buf + i + j*Nx; 79 86 V10 = V00 + 1; 80 87 V01 = V00 + Nx; … … 87 94 y = (j + 0.5) * scale; 88 95 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; 93 98 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; } 98 145 99 146 for (J = ys; J < ye; J += 1.0) { … … 109 156 } 110 157 } 111 112 158 return (TRUE); 113 114 159 } 115
Note:
See TracChangeset
for help on using the changeset viewer.
