Cubic or Hermite interpolation worker.
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 );