Advertisement
overloop

linear_interpolation_not_optimized.cpp

Jun 19th, 2015
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. double interpolate(const QList<double>& xs, const QList<double>& ys, double x, bool* ok = 0) {
  2.  
  3.     if (ys.size()<xs.size()) {
  4.         qDebug() << "double interpolate(xs,ys,x,ok) warning: ys.size()<xs.size()";
  5.     } else if (ys.size()!=xs.size()){
  6.         qDebug() << "double interpolate(xs,ys,x,ok) warning: ys.size()!=xs.size()";
  7.     }
  8.  
  9.     for (int i=0;i<xs.size()-1;i++) {
  10.         if (x >= xs.at(i) && x <= xs.at(i+1)) {
  11.             if (ok)
  12.                 *ok = true;
  13.             double dx = xs[i+1]-xs[i];
  14.             if (dx > 0.0) {
  15.                 return (x-xs[i])/dx*(ys[i+1]-ys[i])+ys[i];
  16.             } else {
  17.                 if (ok)
  18.                     *ok = false;
  19.                 return ys[i];
  20.             }
  21.         }
  22.     }
  23.     if (ok)
  24.         *ok = false;
  25.     if (x < xs.at(0))
  26.         return ys.at(0);
  27.     if (x > xs.at(xs.size()-1))
  28.         return ys.at(ys.size()-1);
  29.     return 0.0;
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement