〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
2010/2/12(金)18:04 - 竹の - nolm01.iee.niit.ac.jp - 817 hit(s)
この松田さんの hsv を rgb に変換する関数を借りれば、CVS 版の gnuplot なら
ぎりぎり「ごまかし」ができないわけでもなさそうなんですが、点数が多いとや
はり使用できる色数の面で無理があるようです。
その「ごまかし」とは、四角 (pointtype 5) に lc rgbcolor variable で色を
つける方法です。
----- ここから -----
set term png
set out 'file.png'
unset key
set view map
# サンプルとして f(z)=z*z = (x*x-y*y) + i (2*x*y) を使用
refunc(x,y)=x*x-y*y # 関数値の実数部分
imfunc(x,y)=2.0*x*y # 関数値の虚数部分
set xrange [-1:1]
set yrange [-1:1]
remin=-1; remax=1; immin=-2; immax=2 # それぞれ関数値の最小値、最大値
nre(rev) = (rev-remin)/(remax-remin) # refunc() の関数値を [0:1] に正規化
nim(imv) = (imv-immin)/(immax-immin) # imfunc() の関数値を [0:1] に正規化
# HSV (いずれも [0:1] とする) から R,G,B (いずれも [0:1]) を計算する関数
hsv2r(h,s,v)=(k=floor(h*6), f=h*6-k, (k==0 || k==5)? v: \
(k==2 || k==3)? v*(1.0-s): \
(k==1)? v*(1.0-f*s): \
v*(1.0-(1.0-f*s)))
hsv2g(h,s,v)=(k=floor(h*6), f=h*6-k, (k==1 || k==2)? v: \
(k==4 || k==5)? v*(1.0-s): \
(k==3)? v*(1.0-f*s): \
v*(1.0-(1.0-f*s)))
hsv2b(h,s,v)=(k=floor(h*6), f=h*6-k, (k==3 || k==4)? v: \
(k==0 || k==1)? v*(1.0-s): \
(k==5)? v*(1.0-f*s): \
v*(1.0-(1.0-f*s)))
# 実数部分 (rev)、虚数部分 (imv) H,V 値とし、それを 24bit RGB 値に変換
z2rgb(rev,imv) = 65536*int(255*hsv2r(nre(rev),1.0,nim(imv))) \
+ 256*int(255*hsv2g(nre(rev),1.0,nim(imv))) \
+ int(255*hsv2b(nre(rev),1.0,nim(imv)))
# とりあえず疑似データファイル ++ で
set pointsize 3
set samples 40
set isosamples 40
splot "++" using 1:2:0:(z2rgb(refunc($1,$2),imfunc($1,$2))) \
w p pt 5 lc rgbcolor variable
set out
----- ここまで -----
sample 数 20 で pointsize 6 位ならそれらしく見えるんですが、40 位にすると
うちの環境ではかなり怪しいです。
なお、上のスクリプトは CVS 版 (4.5) でないと使えないものを色々使ってます
すので、4.0, 4.2.X では動きません。
〔ツリー構成〕
┣【2184】 re(2):複素数データの表示 2010/2/12(金)18:04 竹の (1903) |
〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.