2 ***********************************************************
3 $SNARK_Header: S N A R K 1 4 - A PICTURE RECONSTRUCTION PROGRAM $
4 $HeadURL: svn://dig.cs.gc.cuny.edu/snark/trunk/src/snark/qintp.cpp $
5 $LastChangedRevision: 80 $
6 $Date: 2014-07-01 21:01:54 -0400 (Tue, 01 Jul 2014) $
8 ***********************************************************
10 INITIALIZE CONVOLUTING FUNCTION FOR CONVOLUTION ALGORITHM.
21 REAL qintp(REAL pos, REAL* table, INTEGER n, INTEGER interp)
52 opos = (INTEGER) (pos + 0.5);
57 /// fix for indexes in C++
64 // MODIFIED CUBIC SPLINE
71 return a1 + (REAL) 0.5 * er * (a2 - a0 + er * ((REAL) 2.0 * a0 - (REAL) 5.0 * a1 + (REAL) 4.0 * a2 - a3 + er * (a3 - a0 + (REAL) 3.0 * (a1 - a2))));
73 // BAND LIMITING (SINC) INTERPOLATION
76 if (fabs(or1) < Consts.zero)
82 for (k = 0; k < n; k++)
84 sum += sgn * table[k] / (pos - k);
88 if (((opos / 2) * 2) == opos)
90 return sum * (REAL) sin(Consts.pi * or1) / Consts.pi;
94 return -sum * (REAL) sin(Consts.pi * or1) / Consts.pi;
102 // LINEAR INTERPOLATION
105 return table[epos] + er * (table[epos + 1] - table[epos]);
110 a0 = table[opos - 1] / (REAL) 2.0;
112 a2 = table[opos + 1] / (REAL) 2.0;
113 return a1 + or1 * (-a0 + a2 + or1 * (a0 - a1 + a2));
118 a0 = table[epos - 1] / (REAL) 6.0;
119 a1 = table[epos] / (REAL) 2.0;
120 a2 = table[epos + 1] / (REAL) 2.0;
121 a3 = table[epos + 2] / (REAL) 6.0;
123 a2t2 = table[epos + 1];
124 return a1t2 + er * ((REAL) -2.0 * a0 - a1 + a2t2 - a3 + er * ((REAL) +3.0 * a0 - a1t2 + a2 + er * (-a0 + a1 - a2 + a3)));
129 a0 = table[opos - 2] / (REAL) 24.0;
130 a1 = table[opos - 1] / (REAL) 6.0;
131 a2 = table[opos] / (REAL) 4.0;
132 a3 = table[opos + 1] / (REAL) 6.0;
133 a4 = table[opos + 2] / (REAL) 24.0;
134 a0t2 = (REAL) 2.0 * a0;
135 a1t4 = (REAL) 4.0 * a1;
137 a3t4 = (REAL) 4.0 * a3;
138 a4t2 = (REAL) 2.0 * a4;
139 return a2t4 + or1 * (a0t2 - a1t4 + a3t4 - a4t2 + or1 * (-a0 + a1t4 - (REAL) 5.0 * a2 + a3t4 - a4 + or1 * (-a0t2 + a1 - a3 + a4t2 + or1 * (a0 - a1 + a2 - a3 + a4))));
144 p1pm2 = (er + (REAL) 1.0) * (er - (REAL) 2.0);
145 p2pm3 = (er + (REAL) 2.0) * (er - (REAL) 3.0);
146 ppm1 = er * (er - (REAL) 1.0);
147 pa23 = p1pm2 * p2pm3 / (REAL) 12.0;
148 pa14 = p2pm3 * ppm1 / (REAL) 24.0;
149 pa05 = ppm1 * p1pm2 / (REAL) 120.0;
150 return -pa05 * (er - (REAL) 3.0) * table[epos - 2]
151 + pa14 * (er - (REAL) 2.0) * table[epos - 1]
152 - pa23 * (er - (REAL) 1.0) * table[epos]
153 + pa23 * er * table[epos + 1]
154 - pa14 * (er + (REAL) 1.0) * table[epos + 2]
155 + pa05 * (er + (REAL) 2.0) * table[epos + 3];
158 // error invalid parameter interp