2#include <cgv/math/polynomial.h>
20T bipoly_val(
const mat<T>& bp,
const T& x1,
const T& x2)
22 unsigned n = bp.ncols();
23 unsigned m = bp.nrows();
28 for(
unsigned i = 0; i < m;i++)
29 r(i) = poly_val(bp.row(i),x1);
31 return poly_val(r,x2);
38T bipoly_val(
const mat<T>& bp,
const vec<T>& x)
40 unsigned n = bp.ncols();
41 unsigned m = bp.nrows();
47 for(
unsigned i = 0; i < m;i++)
48 r(i) = poly_val(bp.row(i),x(0));
50 return poly_val(r,x(1));
56cgv::math::mat<T> vander2(
unsigned degree1,
unsigned degree2,
57 const vec<T>& X1,const vec<T> X2)
60 assert(X1.size() == X2.size());
61 unsigned n = X1.size();
62 unsigned m = (degree1+1)*(degree2+1);
68 for(
unsigned r = 0; r < n; r++)
70 for(
unsigned i = 0; i < degree2+1; i++)
71 for(
unsigned j =0; j < degree1+1; j++)
72 Vxy(r,j*(degree2+1)+i) = Vy(r,i)*Vx(r,j);
85mat<T> bipoly_fit(
unsigned degree1,
unsigned degree2,
86 const vec<T>& X1,
const vec<T> X2,
const vec<T> Y)
89 assert(X1.size() == X2.size());
90 assert(X1.size() == Y.size());
93 mat<T> V = cgv::math::vander2(degree1,degree2,X1,X2);
100 return reshape(bp,degree2+1,degree1+1);
133mat<T> bipoly_der_x1(
const mat<T>& bp)
136 assert(bp.ncols() > 0 && bp.nrows() > 0);
138 return zeros<T>(1,1);
140 mat<T> m(bp.nrows(),bp.ncols()-1);
141 for(
unsigned i = 0; i < bp.nrows(); i++)
142 m.set_row(i,poly_der(bp.row(i)));
148mat<T> bipoly_der_x2(
const mat<T>& bp)
151 assert(bp.ncols() > 0 && bp.nrows() > 0);
153 return zeros<T>(1,1);
154 T n = (T)(bp.nrows()-1);
156 mat<T> m(bp.nrows()-1,bp.ncols());
157 for(
unsigned i = 0; i < bp.nrows()-1; i++)
158 m.set_row(i,(n-(T)i)* bp.row(i));
164mat<T> bipoly_int_x1(
const mat<T>& bp,
const T& k=0)
166 mat<T> m(bp.nrows(),bp.ncols()+1);
167 for(
unsigned i = 0; i < bp.nrows();i++)
168 m.set_row(i,poly_int(bp.row(i),k));
174mat<T> bipoly_int_x2(
const mat<T>& bp,
const T& k=0)
177 mat<T> v(1,bp.ncols());
180 mat<T> m = vertcat(bp,v);
182 for(
unsigned i = 0; i < m.nrows()-2;i++)
183 for(
unsigned j = 0; j < m.ncols();j++)
184 m(i,j)=m(i,j)/(m.nrows()-1-i);
A matrix type (full column major storage) The matrix can be loaded directly into OpenGL without need ...