私は外部プログラムをMathematicaとインターフェースさせています。外部プログラムの入力ファイルを作成しています。Mathematicaで生成されたグラフィックスからのジオメトリデータを事前定義されたフォーマットに変換することについてです。これがジオメトリの例です。
図1
ジオメトリはMathematicaでさまざまな方法で記述できます。面倒な方法の1つは次のとおりです。
dat={{1.,-1.,0.},{0.,-1.,0.5},{0.,-1.,-0.5},{1.,-0.3333,0.},{0.,-0.3333,0.5},
{0.,-0.3333,-0.5},{1.,0.3333,0.},{0.,0.3333,0.5},{0.,0.3333,-0.5},{1.,1.,0.},
{0.,1.,0.5},{0.,1.,-0.5},{10.,-1.,0.},{10.,-0.3333,0.},{10.,0.3333,0.},{10.,1.,0.}};
Show[ListPointPlot3D[dat,PlotStyle->{{Red,PointSize[Large]}}],Graphics3D[{Opacity[.8],
Cyan,GraphicsComplex[dat,Polygon[{{1,2,5,4},{1,3,6,4},{2,3,6,5},{4,5,8,7},{4,6,9,7},
{5,6,9,8},{7,8,11,10},{7,9,12,10},{8,9,12,11},{1,2,3},{10,12,11},{1,4,14,13},
{4,7,15,14},{7,10,16,15}}]]}],AspectRatio->GoldenRatio]
これにより、必要な3DジオメトリGraphicsComplex
がMMAの形式で生成されます。
このジオメトリは、私の外部プログラムの次の入力ファイルとして記述されています。
# GEOMETRY
# x y z [m]
NODES 16
1. -1. 0.
0. -1. 0.5
0. -1. -0.5
1. -0.3333 0.
0. -0.3333 0.50. -0.3333 -0.5
1. 0.3333 0.
0. 0.3333 0.5
0. 0.3333 -0.5
1. 1. 0.
0. 1. 0.5
0. 1. -0.5
10. -1. 0.
10. -0.3333 0.
10. 0.3333 0.
10. 1. -0.
# type node_id1 node_id2 node_id3 node_id4 elem_id1 elem_id2 elem_id3 elem_id4
PANELS 14
1 1 4 5 2 4 2 10 0
1 2 5 6 3 1 5 3 10
1 3 6 4 1 2 6 10 0
1 4 7 8 5 7 5 1 0
1 5 8 9 6 4 8 6 2
1 6 9 7 4 5 9 3 0
1 7 10 11 8 8 4 11 0
1 8 11 12 9 7 9 5 11
1 9 12 10 7 8 6 11 0
2 1 2 3 1 2 3
2 10 12 11 9 8 7
10 4 1 13 14 1 3
10 7 4 14 15 4 6
10 10 7 15 16 7 9
# end of input file
今、私がこの外部プログラムのドキュメントから持っている説明はかなり短いです。ここで引用しています。
- 最初のキーワードNODESは、ノードの総数を示します。この行の後には、コメントや空の行はありません。次の行は、x、y、zの3つのノード座標で構成され、行数はノード数と同じである必要があります。
- 次のキーワードはPANELで、パネルの数を示します。その後、各パネルを定義する線があります。最初の整数はパネルタイプを定義します
- ID 1 –四辺形パネル–4つのノードと4つの隣接するパネルによって定義されます。隣接するパネルは、同じ側面(ノードのペア)を共有するパネルであり、速度と圧力の計算に必要です(方法1および2)。欠落しているネイバー(たとえば、後縁近くのパネルの場合)は、値0で埋められます(図1を参照)。
- ID 2 –三角形のパネル–は、3つのノードと3つの隣接するパネルによって定義されます。
- ID 10 –ウェイクパネル–は、4つのノードと、後縁に配置された2つの(隣接する)パネル(ウェイクパネルがクッタ条件を適用しているパネル)で定義された四辺形パネルです。
- パネルタイプ1および2は、入力ファイルのタイプ10の前に定義する必要があります。注意すべき重要な点は、表面の法線です。パネルを定義するノードの順序は反時計回りである必要があります。右手の法則により、指が番号付けに従うように曲げられている場合、親指は「外側」のジオメトリを指す法線ベクトルを示します。
チャレンジ!!
One.objというファイルに3DCADモデルが含まれており、MMAで正常にエクスポートされます。
cd = Import["One.obj"]
出力はMMAGraphics3D
オブジェクト
です
これで、MMAが内部でジオメトリデータを読み取るため、ジオメトリデータに簡単にアクセスできます。
{ver1, pol1} = cd[[1]][[2]] /. GraphicsComplex -> List;
MyPol = pol1 // First // First;
Graphics3D[GraphicsComplex[ver1,MyPol],Axes-> True]
- 上記の入力ファイルの例で説明されているように、に含まれている頂点とポリゴン情報を使用して、テキストファイルに書き込む
ver1
方法。pol1
この場合、ID2タイプ(三角形)のパネルのみがあります。 - Mathematicaの三角測量を使用して、この3Dオブジェクトの表面積を見つける方法。MMAで表面積を計算できる組み込み関数はありますか?
- 今すぐウェイクパネルやID10タイプの要素を作成する必要はありません。三角形の要素のみを含む入力ファイルで問題ありません。
長い投稿で申し訳ありませんが、私が長い間解決しようとしているパズルです。あなたの専門家の何人かがそれをクラックするための正しい洞察を持っているかもしれないことを願っています。
BR