はじめに
TetGenは四面体良質メッシュ生成および三次元のドロネー(Delaunay)四面体分割を作成する.これは三次元の凸領域での補間等,さまざまな操作のためにWolfram言語で使われる.
TetGenLink はTetGenの関数をWolfram言語で使えるようにするためのWolframシステムアプリケーションである.これにはTetGenが高速かつ低メモリで使えるようにするWolfram LibraryLink が利用されている.TetGenLink は他のWolfram言語関数で自動的に使われるが,TetGenの機能が柔軟に,また斬新な方法で使われるような場所で直接使うこともできる.
このアプリケーションを使うためには,まずロードしなければならない.
Needs["TetGenLink`"]inst = TetGenCreate[]pts = {{0., 0., 0.}, {2., 0., 0.}, {2., 0., 2.}, {0., 0., 2.}, {0., 12., 0.}, {2., 12., 0.}, {2., 12., 2.}, {0., 12., 2.}};
facets = {{{1, 2, 3, 4}}, {{5, 6, 7, 8}}, {{1, 5, 6, 2}}, {{2, 6, 7, 3}}, {{3, 7, 8, 4}}, {{4, 8, 5, 1}}};Graphics3D[GraphicsComplex[pts, Map[Polygon, facets]]]TetGenSetPoints[inst, pts];
TetGenSetFacets[inst, facets];次は最初のものをメッシュにした結果を含む新しいTetGenインスタンスを生成する.
inst1 = TetGenTetrahedralize[ inst, "pq1.414a0.1"]elemPts = TetGenGetPoints[inst1];
elemFaces = TetGenGetFaces[inst1];Graphics3D[GraphicsComplex[elemPts, Polygon[elemFaces]]]ワイヤーフレームだけをプロットすると,これがメッシュの外側だけを含んでいることが分かる.
Graphics3D[GraphicsComplex[elemPts, Line[elemFaces[[All, {1, 2, 3, 1}]]]]]内部をすべて三角形分割したい場合は,TetGenGetElementsを使うとよい.
elemPts = TetGenGetPoints[inst1];
elemInds = TetGenGetElements[inst1];ワイヤーフレームプロットには内部が含まれるため,より複雑だといえる.
Graphics3D[GraphicsComplex[elemPts, Line[Flatten[elemInds[[All, #]]& /@ {{1, 2}, {2, 3}, {3, 1}, {1, 4}, {2, 4}, {3, 4}}, 1]]]]メッシュが終了したら,次に示すようにそれを解放することができる.
TetGenDelete[inst];
TetGenDelete[inst1];データのロード
TetGenはいくつかの形式のメッシュデータを読み込んだり書き出したりすることができる.これにより,他のアプリケーションで作成したメッシュを操作したり,TetGenで作成したメッシュを他で使うために保存したりすることもできるため,便利である.
TetGenLink にはデモとして有用な多数のサンプルデータファイルが含まれている.
Needs["TetGenLink`"]次は TetGenLink のインストールの中のいくつかのデータファイルの場所を設定する.
polyFile = FileNameJoin[{$TetGenInstallationDirectory, "ExampleData", "pmdc.poly"}];facetFile = FileNameJoin[{$TetGenInstallationDirectory, "ExampleData", "pmdc.node"}];これでTetGenインスタンスが生成され,データからの点およびファセットの情報がそれにロードされる.
inst = TetGenCreate[];
TetGenImport[polyFile, inst];
TetGenImport[facetFile, inst];outInst = TetGenTetrahedralize[inst, "pq"]pts = TetGenGetPoints[outInst];
faces = TetGenGetFaces[outInst];Graphics3D[GraphicsComplex[pts, Polygon[faces]]]これでTetGenメッシュを操作して微調整したり他の計算をしたりすることができる.ここではリソースを解放するためにインスタンスを削除する.
TetGenDelete[inst];
TetGenDelete[outInst];TetGenの詳細
TetGenはベルリンのWeierstrass Institute for Applied Analysis and Stochastics (WIAS)のHang Si氏(Research Group:"Numerical Mathematics and Scientific Computing")により作成された.詳細はhttp://tetgen.orgを参照されたい.