任意点補間コンターマップを試す

 格子状のデータ行列からコンターマップを描くのは知っていたけど、今度は格子状ではないデータ行列からコンターマップを描く。調べてみるとcshep2dとeval_cshep2dという関数を使って出来る。とりあえず4×4のデータ点を作ってみる。x=1,2,3,4、y=1,2,3,4の格子を基本に、少し散らしてみた。zの値は1〜2の間で適当。

//cshep2d:2次元3次シェパード(散布)補間
//eval_cshep2d:2次元の3次シェパード補間の評価

P1=[1.2 1.1 1.3];
P2=[1.1 2.2 2.0];
P3=[0.8 3.1 1.4];
P4=[0.9 4.2 1.6];
P5=[2.2 1.0 1.3];
P6=[2.0 2.1 1.6];
P7=[1.8 2.8 2];
P8=[1.7 3.7 1.9];
P9=[3.3 1.2 1.2];
P10=[3.1 1.9 1.4];
P11=[2.7 3.2 1.0];
P12=[2.9 3.8 1.2];
P13=[4.2 1.1 2.0];
P14=[4.3 1.9 1.3];
P15=[3.9 3.2 2.1];
P16=[3.8 4.3 1.8];

xyz=[P1;P2;P3;P4;P5;P6;P7;P8;P9;P10;P11;P12;P13;P14;P15;P16];

tl_coef = cshep2d(xyz);

// グリッドにおける評価
xx = (1:0.1:4);
[X,Y] = ndgrid(xx,xx);

Z = eval_cshep2d(X,Y, tl_coef);

clf()

subplot(2,2,1)
grayplot(xx,xx,Z)

subplot(2,2,2)
contour2d(xx,xx,Z,5)

subplot(2,2,3)
plot3d(xx,xx,Z)

subplot(2,2,4)
plot3d1(xx,xx,Z)

 次に適当な点を消してみる。P4,P9,P14の3点を消し、完全に格子状ではなくしてみる。
P1=[1.2 1.1 1.3];
P2=[1.1 2.2 2.0];
P3=[0.8 3.1 1.4];
//P4=[0.9 4.2 1.6];
P5=[2.2 1.0 1.3];
P6=[2.0 2.1 1.6];
P7=[1.8 2.8 2];
P8=[1.7 3.7 1.9];
//P9=[3.3 1.2 1.2];
P10=[3.1 1.9 1.4];
P11=[2.7 3.2 1.0];
P12=[2.9 3.8 1.2];
P13=[4.2 1.1 2.0];
//P14=[4.3 1.9 1.3];
P15=[3.9 3.2 2.1];
P16=[3.8 4.3 1.8];

xyz=[P1;P2;P3;P5;P6;P7;P8;P10;P11;P12;P13;P15;P16];