Biot-Savartの式3
今度は球面上の面における磁場の強さを3D表示してみます。ここでも先ほどの
BiotSavart.sceを使います。
////球面上の点設定////
t=linspace(-%pi,%pi,37)';
p=linspace(-%pi/2,%pi/2,19);
r=0.12;
x=r*cos(t)*cos(p);
y=r*sin(t)*cos(p);
z=r*ones(t)*sin(p);
scf();plot3d2(x,y,z); //四点メッシュ表示
>
ha=gca();ha.box='off';ha.isoview='on';
defaultで水色表示されているということは、裏面が表示されていることを意味します。
clf();
[xx,yy,zz]=nf3d(x,y,z);
xx=xx($:-1:1,:);yy=yy($:-1:1,:);zz=zz($:-1:1,:);
plot3d(xx,yy,zz);
ha=gca();ha.box='off';ha.isoview='on';
これで表になりました。
計算を進めます。
////球面上の点の磁力線の法線成分計算////
getf('BiotSavart.sce');
q=[0.07,0,0,0,0,20*1e-9];
kr=size(x,1);kc=size(x,2);
x=matrix(x,kr*kc,1);
y=matrix(y,kr*kc,1);
z=matrix(z,kr*kc,1);
R=[x,y,z];
B=BiotSavart(q,R);
Bz=sum(B.*R/r,2);
四点メッシュで構成される四角形の色はfigureのcolor_mapを使うので、
四点メッシュに対応する色の数値はfigureのcolor_mapの数値に対応させます。
////法線成分を1〜32でラベル////
scale=32/2;
Bzc=(Bz*1e+15)/250*scale+scale;
scale=scale*2;
Bzc(Bzc>scale)=scale;Bzc(Bzc<1)=1;
いよいよ描画ですが、Scilabでは3D四点メッシュがMATLABと比べて整備されていないため、
相当面倒な手続きを経ることになります。
////描画////
Bzc=matrix(Bzc,kr,kc);
krkc=(kr-1)*(kc-1);
Bzcc=[...
matrix(Bzc(1:($-1),1:($-1)),1,krkc);...
matrix(Bzc(2:$,1:($-1)),1,krkc);...
matrix(Bzc(2:$,2:$),1,krkc);...
matrix(Bzc(1:($-1),2:$),1,krkc)];
Bzcc=Bzcc($:-1:1,:);//表の面に対応させている
要するに、四点メッシュの配列に対応させるように数値データの配列を作り直しています。
f=ha.children.data;
TL=tlist(['3d','x','y','z','color'],f.x,f.y,f.z,Bzcc);
hf=gcf();
hf.visible='off'; //描画はとても遅いです。
hf.color_map=jetcolormap(scale);
ha.children.data=TL; //f=TLは不可
plot3d2だけですと、Fac3dのdataはcolor propertyを持ちません。
そこでtlistという特殊なコマンドを使って
color propertyを持つ手順を経る必要があります。
ha.children.color_mode=-1;
ha.children.color_flag=3;
hf.visible='on';
角度を変えます。
ha.rotation_angles=[0,0];
真上から見たところです。
ha.rotation_angles=[90,0];
真横から見たところです。
ニューロマグに倣い、赤が磁束の湧き出し、青が磁束の沈み込みとしています。
ホントは電流源を透かして表示させたいのですが、ScilabにはMATLABのalpha
に相当するコマンドはないようです。
尚、色はfigureのcolor_mapsを任意のN×3配列にすれば簡単に変えられます。
適当に回転させたものをGIFファイルで保存してみます。
ha.margins=[0,0,0,0];
ha.axes_visible='off';
for ang=0:10:350;ha.rotation_angles=[90,ang];...
xs2gif(hf.figure_id,sprintf('Dipole_%d.gif',ang));end;
10度毎回転したGIF画像が作成できました。
ScilabはMatlabのavifileのような動画ファイルを作成する機能はないようですので、
別のソフトを用いて動画化しました(適当にresizeしています)。