2014年1月25日土曜日

KETpicを試してみました.

KETpic(けとぴっく)は,Scilabなどの数値計算システムを用いたTeXのグラフ描画のためのツールです.色々なところでセミナーや研究会での発表を行って宣伝しているようで,Web上で論文などの断片的な情報が手にはいりますが,マニュアルが充実していないので敷居が高い印象がありました.

最近興味をもって「KETpicで楽々TeXグラフ」という書籍を購入たので,試用してみました.自分が試したのはScilabバージョンです.

上記の書籍は中の人が書いているようで,KETpic唯一のマニュアルみたいなものです.事情はわかりませんが,配布の際にマニュアルとしてpdfで添付したほうが研究会での報告よりも利用者の増加や普及が見込めるのではないでしょうか.何故そのような形態を取らなかったのかが不思議です.

さて,のっけから文句になりましたが,web上で幾つか見ることの出来るKETpicについての論文から,モノクロの図の出力がきれいだということで以前から興味を持っていました.ただScilabのMacへのインストールの仕方がよくわからなかったので試せていませんでした.曲面を2次元面に投影した際の稜線を描画したり,曲面に隠れた線の処理が出来るなど,通常の描画ソフトでは見かけない機能が特徴です.

今回はFriedrichsの軟化子の定義に使う釣鐘型関数(bell-shaped function)の描画を行ってみました.
座標軸は,曲面の外部は実線,内部は点線で描画するようにしてあります.また稜線描画の機能を使って,縁の部分を少し太い線にしてあります.曲面に隠れている奥の部分のフレームも描画出来ますが,今回は見苦しい出力になったのでやめました.

上の図を描くためのScilabのsceファイルのソースを貼付けます.
currentdir=pwd()

//eps=0.5;

//釣鐘型関数の定義
function z=F(x,y)
    t=x^2+y^2
    
    if t<1 then
        z=5*exp(-1/(1-t))
    else
        z=0        
    end
endfunction


//関数のデータ
Rad=2;
Fd=list("z=F(x,y)","x=R*cos(T)","y=R*sin(T)","R=[0,Rad]","T=[0,2*%pi]","");

//視点の設定
SetstereoR(20,40,40,0);

//FDのワイヤフレームデータを一点投影した2次元データ
Sb=Sfbdpersdata(Fd,60);
//一点投影して2次元データ化
PSb=Projpers(Sb);

//ワイヤフレームの本数
N=8;
M=12;
R=Rad/N;T=2*%pi/M;

RL=[1:N]*R;
TL=[0:M-1]*T;

//ワイヤデータの作成
Sw=Wirepersdata(Sb,Fd,RL,TL,50);


//陰線の3次元データ
//Swh=WireHiddenData();

PSw=Projpers(Sw);
//PSwh=Projpers(Swh);

//Xyzax3data 座標軸のPD3dのlistを作成
Sax=Xyzax3data("x=[-2.5,2.5]","y=[-2.5,2.5]","z=[0,2.3]");

//曲面外に出ている座標軸のデータ
Sax1=Crvsfpersdata(Sax,Sb,Fd);
//曲面によって隠される座標軸のデータ
Saxh1=CrvsfHiddenData();
PSax1=Projpers(Sax1);
PSaxh1=Projpers(Saxh1);

//スケルトンデータ
//Skax=Skeletonpersdata(list(Sax),list(Sb,Sw));

Setwindow([-3,3],[-2,2.3]);//ウィンドウ範囲を設定

Windisp(PSb,PSw,PSax1,"c")//画面を開き,PD(プロットデータ)列を表示 cは現在の画面を消去して表示


cd(currentdir);
Openfile("bell_shaped_function.tex")//書き出し用ファイルを開く
Beginpicture("10/12cm");//picture環境を始める
Drwline(PSax1,0.7);
//Invdashline(PSaxh1,0.5);
Drwline(PSw,0.5);
//Dottedline(PSwh,0.5,0.7);
Drwline(PSb,0.7);
Xyzaxpersname("x=[-2.5,2.5]","y=[-2.5,2.5]","z=[0,2.3]");

//一点投影で,各軸のラベルを書き入れる
Expr([1.5,1.8],"e2","\displaystyle z=\exp\Bigl(-\frac{1}{1-\lvert x\rvert^2}\Bigr)");
Endpicture(0);//picture環境を終える(座標軸を書かない)
Closefile();//書き出し用ファイルを閉じる
KETpicの公式ページには図のサンプルはありますが,ソースのサンプルがなく,書籍を買わない場合は添付されているコマンドリファレンスを見たり,Webで検索して論文にあるわずかな記述を参考にするしかなく,非常に使い辛いです.せめて公式ページに特徴的な図のソースのサンプルがおいてあれば,もっと使い易くなるのではないかと期待しています.

実線の描画では線の太さを指定出来るのに,破線は指定出来ない仕様は直して欲しいかな.
追記:2014/09/06
破線を描く命令DashlineやInvdashlineでは線の太さを指定できないので、破線の太さを調整するにはSetpenコマンドを使います。