Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double interpolate(const QList<double>& xs, const QList<double>& ys, double x, bool* ok = 0) {
- if (ys.size()<xs.size()) {
- qDebug() << "double interpolate(xs,ys,x,ok) warning: ys.size()<xs.size()";
- } else if (ys.size()!=xs.size()){
- qDebug() << "double interpolate(xs,ys,x,ok) warning: ys.size()!=xs.size()";
- }
- for (int i=0;i<xs.size()-1;i++) {
- if (x >= xs.at(i) && x <= xs.at(i+1)) {
- if (ok)
- *ok = true;
- double dx = xs[i+1]-xs[i];
- if (dx > 0.0) {
- return (x-xs[i])/dx*(ys[i+1]-ys[i])+ys[i];
- } else {
- if (ok)
- *ok = false;
- return ys[i];
- }
- }
- }
- if (ok)
- *ok = false;
- if (x < xs.at(0))
- return ys.at(0);
- if (x > xs.at(xs.size()-1))
- return ys.at(ys.size()-1);
- return 0.0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement