hirax.net::inside out::2009年06月25日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年5月 を読む << 2009年6月 を読む >> 2009年7月 を読む

2009-06-25[n年前へ]

Mathematicaで発色シミュレーションをオブジェクト風記述にするライブラリ 

 以前作った、「分光スペクトル・色処理用のMathematicaライブラリ(関数群)」を利用して、「Mathematicaで発色シミュレーションをオブジェクト風記述にするライブラリ」を作りました。前回書いたように、三次元構造の中で反射・屈折・散乱を行う「光」のスペクトルが、どのように変化していったかを知ることができます。

 ライブラリは、Imagearts.2.5.nb(3.7MB)として、サイト上にアップロードしてあります。このファイルには、関数・オブジェクト定義に加え、いくつかのサンプルが入っています。

 たとえば、「4層構成の物質(Layer)があり、それらの層はすべて透明だけれども、その中間層2層の散乱度合いを変えた場合」のシミュレーションを複数条件下でしたければ、下記のようなコードを書けばOKということになります。

layers[sc_] := (z = #[[3]]; Piecewise[{
 {{1, 0,Spector[new][set,transparentFilter]},
   z > 1},
 {{1, sc,Spector[new][set, transparentFilter]},
   1 >= z && z > 0.5},
 {{1, sc,Spector[new][set, transparentFilter]},
   0.5 >= z && z > 0},
 {{1, 0,Spector[new][set, transparentFilter]},
   0 >= z}                                      }  ]) &;
Table[Light[new][in,Layer[new][set,layers[i]]][showTrace],
  {i,0,1,0.1}]

 ここでは、最初に層構成を純関数として定義し、その純関数を使い、条件を変えたオブジェクトをTableで作成し・計算を行っています。

 なお、現状のライブラリは、表面形状は水平平滑に限る、という単純なコードになっています。表面凹凸対応は、また気が向いた(近い)時期にしてみよう、と思います。

Mathematicaで発色シミュレーションをオブジェクト風記述にするライブラリ