210 typedef typename std::iterator_traits<OutputIterator>::value_type TReal;
212 size_t nrY = std::distance( begY , endY );
213 OutputIterator outI = out;
215 for(
unsigned int i = 0 ; begX != endX ; ++i , ++begX, ++outI )
217 double xd = *begX - start_index;
218 int index =
static_cast<int>(floor(xd));
220 TReal mu = xd -
static_cast<double>(index);
230 TReal y4 = *(begY+1);
231 *outI = functor(y1 , y2 , y3 , y4 , mu );
238 TReal y3 = *(begY+1);
239 TReal y4 = *(begY+2);
240 *outI = functor(y1 , y2 , y3 , y4 , mu );
242 else if( index > 0 && index <
static_cast<int>(nrY - 2) )
244 YInputIterator begTmp = (begY + index - 1);
246 TReal y2 = *(begTmp + 1);
247 TReal y3 = *(begTmp + 2);
248 TReal y4 = *(begTmp + 3);
249 *outI = functor(y1 , y2 , y3 , y4 , mu );
251 else if(index ==
static_cast<int>(nrY-2) )
253 YInputIterator begTmp = (begY + index - 1);
255 TReal y2 = *(begTmp+1);
256 TReal y3 = *(begTmp+2);
258 *outI = functor(y1 , y2 , y3 , y4 ,mu);
260 else if(index ==
static_cast<int>(nrY-1) )
262 YInputIterator begTmp = (begY + index - 1);
264 TReal y2 = *(begTmp+1);
265 TReal y3 = *(begTmp+1);
266 TReal y4 = *(begTmp+1);
267 *outI = functor(y1 , y2 , y3 , y4 , mu );
289 OutputIterator out_p,
290 TFunctor & interpolator,
294 typedef typename std::iterator_traits<OutputIterator>::value_type TReal ;
295 size_t nrX = std::distance(x_p,endX);
296 size_t nrY = std::distance(y_p,endY);
299 for(
unsigned int i = 0 ; i < nrX; ++i, ++x_p, ++out_p)
301 xd = * x_p - start_index;
302 double indexd = floor(xd);
303 int index =
static_cast<int>( indexd );
304 assert(fabs (index - indexd) < 0.001);
310 }
else if( index <
static_cast<int>(nrY-1) )
312 TReal mu = xd - indexd;
313 YInputIterator y1_p = (y_p + index);
315 TReal y2 = *(++y1_p);
316 *out_p = interpolator(y1,y2,mu);
320 *out_p = *(y_p + (nrY-1));
static void interpolateCubicHermite(YInputIterator begY, YInputIterator endY, XInputIterator begX, XInputIterator endX, OutputIterator out, TFunctor &functor, int start_index=0)
Cubic or Hermite interpolation worker.
static void interpolateLinearCosine(YInputIterator y_p, YInputIterator endY, XInputIterator x_p, XInputIterator endX, OutputIterator out_p, TFunctor &interpolator, int start_index=0)
Linear cubic interpolator worker.