Example of refill and gspline.
MGL code:
new x 10 '0.5+rnd':cumsum x 'x':norm x -1 1 copy y sin(pi*x)/1.5 subplot 2 2 0 '<_':title 'Refill sample' box:axis:plot x y 'o ':fplot 'sin(pi*x)/1.5' 'B:' new r 100:refill r x y:plot r 'r' subplot 2 2 1 '<_':title 'Global spline' box:axis:plot x y 'o ':fplot 'sin(pi*x)/1.5' 'B:' new r 100:gspline r x y:plot r 'r' new y 10 '0.5+rnd':cumsum y 'x':norm y -1 1 copy xx x:extend xx 10 copy yy y:extend yy 10:transpose yy copy z sin(pi*xx*yy)/1.5 alpha on:light on subplot 2 2 2:title '2d regular':rotate 40 60 box:axis:mesh xx yy z 'k' new rr 100 100:refill rr x y z:surf rr new xx 10 10 '(x+1)/2*cos(y*pi/2-1)':new yy 10 10 '(x+1)/2*sin(y*pi/2-1)' copy z sin(pi*xx*yy)/1.5 subplot 2 2 3:title '2d non-regular':rotate 40 60 box:axis:plot xx yy z 'ko ' new rr 100 100:refill rr xx yy z:surf rr
C++ code:
void smgl_refill(mglGraph *gr)
{
mglData x(10), y(10), r(100);
x.Modify("0.5+rnd"); x.CumSum("x"); x.Norm(-1,1);
y.Modify("sin(pi*v)/1.5",x);
if(big!=3) { gr->SubPlot(2,2,0,"<_"); gr->Title("Refill sample"); }
gr->Axis(); gr->Box(); gr->Plot(x,y,"o ");
gr->Refill(r,x,y); // or you can use r.Refill(x,y,-1,1);
gr->Plot(r,"r"); gr->FPlot("sin(pi*x)/1.5","B:");
if(big==3) return;
gr->SubPlot(2,2,1,"<_"); gr->Title("Global spline");
gr->Axis(); gr->Box(); gr->Plot(x,y,"o ");
r.RefillGS(x,y,-1,1); gr->Plot(r,"r");
gr->FPlot("sin(pi*x)/1.5","B:");
gr->Alpha(true); gr->Light(true);
mglData z(10,10), xx(10,10), yy(10,10), rr(100,100);
y.Modify("0.5+rnd"); y.CumSum("x"); y.Norm(-1,1);
for(int i=0;i<10;i++) for(int j=0;j<10;j++)
z.a[i+10*j] = sin(M_PI*x.a[i]*y.a[j])/1.5;
gr->SubPlot(2,2,2); gr->Title("2d regular"); gr->Rotate(40,60);
gr->Axis(); gr->Box(); gr->Mesh(x,y,z,"k");
gr->Refill(rr,x,y,z); gr->Surf(rr);
gr->Fill(xx,"(x+1)/2*cos(y*pi/2-1)");
gr->Fill(yy,"(x+1)/2*sin(y*pi/2-1)");
for(int i=0;i<10*10;i++)
z.a[i] = sin(M_PI*xx.a[i]*yy.a[i])/1.5;
gr->SubPlot(2,2,3); gr->Title("2d non-regular"); gr->Rotate(40,60);
gr->Axis(); gr->Box(); gr->Plot(xx,yy,z,"ko ");
gr->Refill(rr,xx,yy,z); gr->Surf(rr);
}