Asdfgの日記

freefemを使いこなそう

サーモグラフィックのような色諧調


f:id:Asdfg:20180921025620p:plain

初めての計算はコードを間違える可能性が大なので
かならずplotで結果のグラフを確認しながらプログラムを行うことが多いです
大体グラフの変になり方からバグの位置が想定されることが多数です

ただfreefemのデフォルトのplotの色諧調はオシャレとはいいがたい。。。
人に見せるときにはそれなりに色諧調をコントロールしたい
結構デザインセンスが要求されるが
よく使う色のセットを作っておくと便利
今回は温度の場合に使いそうな
サーモグラフィックライクな色調を作っておく

サーモグラフの画像からスポイトで色をとってきてhsvに変換
www.peko-step.com

plotコマンドではhsv色空間を線形に補完して
色諧調つないでるっぽい?
ここで問題発生
黄色(h=50/360程度)から赤(h=360/360)に変化させる際に
途中の緑と青をとおって色変化してしまう。。。
そうか!一周できるかもしれない
黄色をh=(360+50)/360で定義してやればOK (なんだhは1超えても定義できるんだ。。。)

あときれいに繋がったような色身にするのは
結構難しいな
赤のところはもう少し調整必要かも

まあとりあえず
というわけでこんな色身になりました
ほかの色セットもまたつくろ

以下、サンプルコード

//thermographic like color scale & gradation control test 

real[int] xx(10),yy(10);
mesh Th=square(10,10);
fespace Vh(Th,P2);
Vh uh=8*x;

real[int] colorhsv=[ // thermographic color hsv model
410./360.,  0./100. , 100./100., 
410./360., 50./100. , 100./100., 
405./360., 90./100. , 100./100., 
385./360., 85./100. , 100./100.,
365./360., 80./100. ,  85./100.,
345./360., 80./100. ,  65./100.,
325./360., 85./100. ,  50./100.,
300./360., 90./100. ,  35./100.,
280./360., 95./100. ,  20./100.,
260./360.,100./100. ,   0./100.

];

real[int] newviso(81);
for (int i=0;i<newviso.n;i++)
newviso[i]=i*0.1;
plot(uh,value=1,viso=newviso,fill=1,wait=1,hsv=colorhsv);

(20180922追記)
FreeFEMのヴァージョン3.4600000(32bit版)では
hが1を超えての定義はできないようで
色が黒くなってしまうので
注意