〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
2010/2/12(金)09:57 - 松田七美男 - 116-64-137-80.rev.home.ne.jp - 883 hit(s)
1.gnuplotではRGB値を以下のように個別に関数で与えることができます.
set palette functions gray,gray**2,sin(gray)
残念ながら,grayはスカラーですので,2つの独立な情報を与えることができません.
2.4.0からはrgbimage(x,y,r,g,bの並び)を扱えるので,小さいイメージファイルを
外部コマンドで作成して,以下のように表示できます.
plot "イメージファイル" w rgbimage
しかしイメージファイルはベタな構造(圧縮なし)しかサポートしてませんから,
640x640のイメージファイルでも巨大となり実用的ではありません.
3.どうせ外部でイメージファイルを作成するのならば,格子間の値を補完してくれる
OpenGLのようなものを描画エンジンに使うと,計算する格子数を間引きできます.
全く,個人的な趣味ですが,描画にはgeomviewがお勧めです.
以下にoctavedでgeomviewのCMESH書式データを作成し,
geomviewを呼び出して表示するスクリプトを紹介します(complex.oct).
$ octave complex.oct
で実行してみてください.
function [r,g,b] = hsv2rgb(h,s,v)
hi = floor(h/60);
f = h/60 - hi;
p = v*(1-s);
q = v*(1-f*s);
t = v*(1-(1-f)*s);
switch hi
case {0} r=v; g=t; b=p;
case {1} r=q; g=v; b=p;
case {2} r=p; g=v; b=t;
case {3} r=p; g=q; b=v;
case {4} r=t; g=p; b=v;
case {5} r=v; g=p; b=q;
endswitch
endfunction
N = 101; # NxN 格子
s = 1; # 彩度は1
meshfile="complex.mesh"; # geomview へ与えるファイル名
fid = fopen("complex.mesh", "w", "native");
fprintf(fid, "CMESH\n%d %d\n",N,N);
for m = linspace(-1,1,N); # [-1:1]をN-1分割
for n = linspace(-1,1,N);
z = sinh(m + I*n); # Iは虚数単位
h = arg(z)*180/pi; # piはパイ
if (h < 0) h += 360; endif;
v = abs(z);
[r,g,b] = hsv2rgb(h,s,v);
fprintf(fid, "%f %f %f %f %f %f 1\n",m,n,v,r,g,b);
endfor
fprintf(fid,"\n");
endfor
fclose(meshfile);
geomcom = sprintf("geomview -c \"(camera \"Camera\" camera{perspective 0})\" %s", meshfile);
system(geomcom);
〔ツリー構成〕
┣【2183】 re(1):複素数データの表示 2010/2/12(金)09:57 松田七美男 (1899) |
〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.