Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#include <opencv2/core/core.hpp>
#include <iostream>
#include <stdio.h>
/*
This work by Ryan Muller released under the Creative Commons CC0 License
http://creativecommons.org/publicdomain/zero/1.0/
*/
/**
INPUT: std::vector<double> x
represented as a function.
OUTPUT: std::vector<cv::Vec4d> P
where a = t-i
b = i-t+1
*/
std::vector<cv::Vec4d> out;
// spline size
int n=x.size();
// loop counter
int i;
// working variables
double p;
std::vector<double> u;
// second derivative
std::vector<double> z;
u.resize(n);
z.resize(n);
z[0] = u[0] = 0;
z[n-1] = 0;
// decomposition loop
for(i=1;i<n-1;i++){
p = 0.5*z[i-1] + 2.0;
z[i] = -0.5/p;
u[i] = x[i+1]+x[i-1]-2*x[i];
u[i] = (3*u[i]-0.5*u[i-1])/p;
}
// back-substitution loop
for(i=n-1;i>0;i--){
for(i=0;i<n-1;i++){
out.push_back(cv::Vec4d(
x[i+1],
x[i],
z[i+1],
z[i]
));
return out;
/**
void splinterpDemo(){
std::vector<double> samples;
std::vector<cv::Vec4d> spline;
cv::Vec4d p;
double x;
for(i=0;i<imax;i++){
x = (cos(2*M_PI*i/(imax-1)));
samples.push_back(x);
spline = splinterp(samples);
for(i=0;i<spline.size();i++){
p = spline.at(i);
printf("x%d(t):= if t>= %d and t<=%d then %.8f * (t-%d) + %.8f * (%d-t) + "
i,i,i+1,p[0],i,p[1],i+1,p[2],i,i,p[3],i+1,i+1);
printf("wxplot2d([");
for(i=0;i<spline.size();i++){
if(i>0) cout << ",";
printf("x%d(t)",i);
printf("],[t,0,%d],[gnuplot_preamble,\"set nokey;\"])$\n",spline.size());