Yamamoto's Laboratory
 
 
入力ファイル
 ポリゴン
 
 
研究内容 有限要素法 メッシュ生成::Triangle ポリゴン

メッシュ生成Triangle :: ポリゴンポリゴンファイル (*.poly) についてr

有限要素法に使うメッシュジェネレーター Triangle で使われるポリゴンファイルについて説明します.

目次


はじめに

ポリゴンファイル (*.poly) は,Triange の計算領域をしているファイルです.

ポリゴンファイルの書き方

計算領域

Triangle によりメッシュを生成する領域を,図1に示します.計算領域は,二つのセグメント [1][2],一つの穴 (hole) [3] で構成されています.これらのセグメントは,セグメント境界ライン {1} — {11} で定義されます.境界ラインは 19 の頂点で定義されます.

計算領域
図1: 計算領域

ポリゴンファイル (*.poly)

前節の図1に示した計算領域をメッシュ分割するための Triangle の入寮kファイルをリスト 1 に示します.ナンバーサイン「#」があると,行末までがコメントです.ここでは使っていませんが,空行もリストに含めることができます.これもコメント行と同じ扱いになります.

1を計算するインプットファイル (sample.poly)

001   #========== difinition: nodes ========================
002   9       2       2       1
003   #-----------------------------------------------------
004   1       2.0     2.0     56.234     2.34       -1
005   2       2.0     10.0    99.876     9.86       -2
006   3       8.0     10.0    1.2e-5     6.5e6      -3
007   4       8.0     2.0     1.3454     6.129       0
008   5       14.5    6.0    -9.876     -23.4        0
009   6       7.0     6.0     1.5678    -1.2e3       0
010   7       5.0     4.0     3.56       3.1415      0
011   8       3.0     6.0     4.67       2.7182      1
012   9       5.0     8.0     5.78      -0.341       1
013   #
014   #
015   #========== difinition: Segment lines ================
016   11      1
017   #-----------------------------------------------------
018   #  segment [1]
019   1       1       2       10
020   2       2       3       10
021   3       3       4       99
022   4       4       1       10
023   #
024   #  segment [2]
025   5       4       3       99
026   6       3       5       10
027   7       5       4       10
028   #
029   #  segment [3]
030   8       6       7       20
031   9       7       8       20
032   10      8       9       20
033   11      9       6       20
034   #
035   #
036   #==========  difinition: holes =======================
037   1
038   #-----------------------------------------------------
039   1       5.0     6.0
040   #
041   #
042   #==========  difinition: Optional ====================
043   2        2
044   #-----------------------------------------------------
045   1       3.0     3.0     1.0     0.2
046   2       11.0    6.0     20.98   0.5

このリストの構造やその内容は,次のとおりです.

頂点の定義

セグメントは複数の頂点を直線で結んだ閉じた領域です.これらの頂点を,リスト 1 の 002012 で定義します.002 は引き続く頂点リストの情報,004012 は頂点リストです.

ここでの頂点の情報は,Triangle のアウトプットファイル「*.n.node」に書かれます.

頂点リスト情報

頂点リスト情報は,1行で以下の数値のリスト(1行)です.

<頂点の数> <次元> <属性の数> <頂点マーカー>

その内容は,以下のとおりです.

入力 意味
頂点の数 整数 引き続く頂点リストで示す頂点数
次元 整数 セグメントの次元 (2でなくてはならない)
属性の数 整数 リストに示す属性数
境界マーカー 整数 マーカーを,0:使わない,1:使う.
頂点リスト

頂点リストは,各行に以下の数値並んでいます.頂点の数だけ行があります.

<頂点番号> <X座標> <Y座標> [属性] … [境界マーカー]

その内容は,以下のとおりです.

入力 意味
頂点番号 整数 頂点毎の連続する番号
X座標 実数 頂点のX座標
Y座標 実数 頂点のY座標
属性 整数/実数 頂点の属性.頂点リスト情報の属性数だけ指定する.
境界マーカー 整数 境界マーカーを表す数

境界ラインの定義

境界マーカーの値は,Triangle のアウトプットファイル「*.n.edge」に書かれます.これには,全ての三角形エレメントの辺のマーカー値が書かれています.境界ラインリストで定義されていない三角形の辺のマーカーの値は,「0」になります.

境界ラインリスト情報
入力 意味
境界ラインの数 整数 引き続くセグメント境界ラインの数
境界マーカー 整数 境界マーカーを,0:使わない,1:使う.
境界ラインリスト
入力 意味
境界番号 整数 境界毎の連続する番号
頂点番号 整数 ラインの端の頂点番号
頂点番号 整数 もう一方のラインの端の頂点番号
境界マーカー 整数 境界のマーカーを表す整数

穴 (hole) の定義

穴 (hole) リスト情報
入力 意味
穴リストの数 整数 計算領域のセグメントのうち穴 (hole) の数
穴 (hole) リスト
入力 意味
セグメント番号 整数 セグメント毎の連続する番号
X座標 実数 セグメント内部のX座標
Y座標 実数 セグメント内部のY座標

オプションの定義

オプションで指定したセグメントの属性は,Triangle のアウトプットファイル「*.n.ele」に書かれます.このファイルの各行がエレメントを表し,そこに属性が書かれています.

セグメントリスト情報
入力 意味
セグメントの数 整数 計算領域のセグメントの数
セグメントリスト
入力 意味
セグメント番号 整数 セグメント毎の連続する番号
X座標 実数 セグメント内部のX座標
Y座標 実数 セグメント内部のY座標
属性 整数/実数 セグメントの属性(一つ).
境界マーカー 整数 セグメントを構成する三角形エレメントの最大面積

メッシュ生成結果

以下のコマンドで,メッシュを生成します.

$ triangle -pqenaA sample
メッシュ生成結果
図2: メッシュ生成結果

英語マニュアルの翻訳

ここでは,英文のマニュアルを日本語化します.最初は Google 翻訳で日本語化しました.少しずつ修正をていますが,まだ Google 翻訳のままのところはおかしな日本語です.雰囲気はわかると思います[英語の原文].

.poly ファイルは,いくつかの追加情報を加えた PSLG ファイルです. PSLG は計算幾何学者になじみの平面直線グラフを表します.その定義により,PSLG は頂点と線分のリストだけです..polyファイルには,三角形の面積の穴や凹部だけでなく,セグメントの属性と制約についての情報を含めることができます.

  • セグメントの頂点の情報(1行): <頂点の数> <次元 (2でなければなりません) > <属性の数> <境界マーカー(0または1)>
  • セグメントの頂点座標定義(複数行): <頂点番号> <X> <Y> [属性] [境界マーカー]
  • セグメントの境界ライン情報(一行): <セグメント境界ラインの数> <境界マーカー (0または1)>
  • セグメント境界ラインの定義(複数行): <セグメント境界ライン番号> <セグメント頂点の番号> <セグメント頂点の番号(もう一方の端)> [境界マーカー]
  • 内部の穴の情報(1行): <穴の数>
  • 内部の穴の定義(複数行): <穴の番号> <X座標> <Y座標>
  • オプションの情報(1行): <セグメントの数>
  • オプションの定義(複数): <セグメント番号> <X座標> <Y座標> <属性> <最大面積>

最初のセクション (頂点の定義) では,セグメントの頂点のリストを記述します.そのリストの形式は,Triangle の 出力である .node ファイルファイルと同一です. <頂点の#>は頂点が別々の.nodeファイルのファイルに記載されていることを示すためにゼロに設定することができます.トライアングルによって生成.polyファイルは常にこの形式を持っています.このように表す頂点集合は,それが容易に(.polyまたは.nodeファイルのファイルが読み込まれているかどうかに応じて)セグメントまたはなしで三角ことができるという利点を有します.

2番目のセクションでは,セグメント境界のラインを定義します.セグメント境界ラインは,三角エレメント分解(各セグメントは小さい三角形エレメントに細分することができるが)の時に使われる,三角形の辺にもなります.各セグメント境界ラインは,2つの端点のノード番号を指定することによって定義します.ひとつのセグメントは,それを構成するノードの一筆書きのリストになります.各セグメントは,境界マーカを指定することもできます.

-q,-a,-u,及び-sが選択されていない場合,三角形は,各セグメントは,三角測量で,単一のエッジとして現れる制約ドロネー三角形分割(CDT)を,生成されます. -q,-a,-u,または-sが選択された場合,三角形は,セグメントが小さいエッジに細分することができる,適合拘束ドロネー三角形分割を生成します. -Dが同様に選択された場合,トライアングルは,準拠ドロネー三角形分割を生成しますので,すべての三角形はドロネーで,ちょうどドロネーを拘束されません.

(-cが選択されている場合,および凹部) 3番目のセクションには,三角測量に穴を示しています.穴は,各穴の内側の点を識別することによって指定されています.三角測量が形成された後,トライアングルはその進行状況がPSLGセグメントによってブロックされるまで,各穴の点から広がる,三角形を食べることによって穴を作成します.あなたは,セグメント内の各穴を囲むように注意する必要があります,またはあなたの全体の三角測量を離れて食べている可能性があります.セグメントに当接する二つの三角形が食べている場合は,セグメント自体も食べられます.セグメント上に直接穴を置かないでください.あなたが行う場合は,トライアングルは任意のセグメントの一方の側を選択します.

オプションの第四節で,地域属性(リージョン内のすべての三角形に割り当てられるため),最大三角形の面積に関する地域制約.トライアングルは -A スイッチが使用されているか,-a スイッチは,それを次の番号なしで使用され,-rスイッチを使用しない場合にのみ,このセクションをお読みます.地域属性とエリア制約は穴と同じように伝播されます.あなたはそれぞれの属性および/または制約のためのポイントを指定し,属性および/または制約が点を含む (セグメントで囲まれた) 全領域に影響を与えます.二つの値がx座標とy座標の後の行に書かれている場合は,最初のそのような値は,地域の属性であると仮定される(ただし,-Aスイッチが選択されている場合にのみ適用される),及び第2の値があると仮定されます地域の面積制約(-aスイッチが選択されている場合にのみ適用されます).あなたは,スイッチの選択に応じて,属性と面積制約の両方として機能することができる座標,後に一つだけの値を指定することもできます.あなたが -A を使用していると -a が同時に切り替わり,エリア制約を課すことなく,いくつかの領域に属性を割り当てたい場合は,負の最大領域を使用します.

空白行と「#」で始まるコメントは,どこにでも配置することができます.頂点とセグメント,穴,領域を表す番号は 1 またはゼロから始まる連続する整数で指定します. (1または0から番号付けを開始する選択は,すべてのオブジェクト間で一貫している必要があります.)

三角測量が.polyファイルから作成されたときは,入力された頂点集合の凸包を囲むれ,PSLGセグメントにおいて三角形分割する領域全体を囲む,または-cスイッチを使用する必要があります.あなたは-cスイッチを使用しない場合は,トライアングルは,セグメントによって囲まれていないすべての三角形を食べるようになります.あなたが注意されていない場合,あなたの全体の三角測量を侵食することができます.あなたは-cスイッチを使用する場合,あなたはまだだけで凸包内の穴の適切な配置により凹部を生成することができます.

理想的な PSLG は,あなたがあなたの.polyファイルが理想的にするために必要とされない(.もちろん,除いて,各セグメントのエンドポイント)が交差するセグメント,またセグメント上に横たわる任意の頂点を持っていませんが,あなたが行くことができるかを認識する必要があります違う.セグメントの交点は,比較的安全である - トライアングルはあなたのための交点を計算し,三角測量に追加されます - 限り,あなたのマシンの浮動小数点精度が問題にならないように.あなたが同じ場所で交差する3つのセグメントがある場合は運命を誘惑し,交点がどこにある三角形を把握することを期待しています.トライアングルは,小さな三角形を絞り込むしようとしない限り,機械精度の最後のビットを使用しています - 浮動小数点丸め誤差のおかげで,トライアングルは,おそらく3セグメントが異なる3点で交差し,あなたの出力に微小三角形を見つけることを決定します,およびすべてで終了しません.あなたは,入力ファイルの交点を入れて,手で二つに各セグメントを分割する方がいいでしょう.あなたはセグメントの中央に頂点を置き,トライアングルがその頂点でセグメントを分割することを願っていた場合も,あなたは幸運を得るかもしれません.一方,三角形は頂点がライン上に正確に位置しないことを決めるかもしれません,あなたはあなたの出力の針のように鋭い三角形があります - あなたは品質のメッシュを生成している場合や,小さな三角形がたくさん.

トライアングルが.polyファイルを読み込むと,それはまた,入力セグメントのサブセグメントエッジをすべて含ん.polyファイルを,書き込みます.-c スイッチが使用される場合,出力.polyファイルは凸包上のエッジの全てが含まれます.したがって,出力.polyファイルが入力されたセグメントに関連エッジを見つけ,有限要素シミュレーションにおける境界条件を設定するのに便利です.あなたは出力メッシュを精製することを計画,およびセグメントは,後で三角形分割で不足しているしたくない場合はさらに重要なのは,あなたがそれを必要とします.

ページ作成情報

参考資料

  1. 最初は,Triangle のホームページを見ることを勧めます.

更新履歴

2016年07月24日 ページの新規作成


no counter