Mathematicaでメタボール

[pukiwiki]
ちょっと勉強がてら。

http://boxheadroom.com/wp/wp-content/uploads/2009/11/metaball.gif
細胞分裂みたい。 気分は[[河口洋一郎>ググる:河口洋一郎]]w

[/pukiwiki]

[pukiwiki]
最初はMathematicaで、整数計画法とか、Reduce関数による不等式の解き方を勉強してたはずなのですが、知らないうちに脱線(汗

単純にメタボールでCGを作るだけなら、[[Blender:http://blender.jp]]でやったほうが速いですけど。(Blenderなら 球をマウスでドラッグすると、リアルタイムでグリグリくっついたり離れたりしますし)

メタボールというのは、電子のような仮想的な、「近づけると、くっついちゃう球」 を使って、有機的な局面をモデリングする手法。詳しくはgoogle先生で。
-[[ググる:メタボール]]

NHKの番組「人体」でも使われました。
昔はPCのメモリが少なかったので、滑らかな曲面を使いたいとき、ポリゴンよりも重宝されたのです。(昔話)

以下はMathematica用のプログラム。
tの値を適宜変えてやると、4つの球が近づいたり離れたりします。
[/pukiwiki]

   t=2.5;
   plist={ {t,0,t},{-t,0,t},
            {t,0,-t},{-t,0,-t}  };
   e=Compile[ {x,y,z},
          9/ ( x^2 + y^2 + z^2 +1*^-5)];
   p={x,y,z};
   RegionPlot3D[ 
        Total[e@@(p-#)&/@plist] >3.2,
         {x, -6, 6},
         {y, -6, 6}, {z, -6, 6}, 
       Mesh -> False, PlotPoints -> 35,Axes->False,Boxed->False]

IronPython側で、適宜 tの値を変更して アニメを作成しました。

今回使ったのが、RegionPlot3D関数。空間中の、与えられた条件を満たしているところを3DCGで表示してくれます。便利。

コメントを残す

メールアドレスが公開されることはありません。