tetgen を使用して、中空のドームを作成しようとしています。私は三角形を使用していて、円を三角測量し、方程式 z = sqrt(abs(r^2 - x^2 - y^2)) に従って z 値を上げるだけでしたが、端の近くで非常に悪いストレッチをしていました。
したがって、このドームの多数のポイントを生成し、それを埋めずにメッシュ化したいと思います。基本的に、Tetgen は .node および .faces ファイルを提供することでこれを実行しますが、問題はまだ底を取得していることです。そして、それを取り除く方法がわかりません。私は tetgen と meshpy にかなり慣れていないので、誰かがこれのワークフローを教えてくれたら、とてもありがたいです。答えは実はとても簡単かもしれません。
たとえば、単純な関数を使用して、円の下部にポイントを作成できます。
def gen_pts_on_circle(num_pts, radius):
pnts = []
theta = 360.0 / num_pts
# loop through circle using theta for point placement
for i in np.arange(0, 360, theta):
x = radius * np.cos(np.radians(i))
y = radius * np.sin(np.radians(i))
z = 0.0
pnts.append((x,y,z))
return np.array(pnts)
次に、次の関数を使用して、ドーム上にランダム ポイントを生成します。
def gen_random_pts(num_pts, radius):
pts = []
for i in xrange(num_pts):
q = np.random.random() * (np.pi * 2.0)
r = np.sqrt(np.random.random())
x = (radius * r) * np.cos(q)
y = (radius * r) * np.sin(q)
# Just the sphere equation with abs value to make a dome
z = np.sqrt(abs(r**2 - x**2 - y**2))
pts.append((x,y,z))
return np.array(pts)
次に、単純に .node ファイルからヘッダーを平手打ちし、tetgen を実行して .face ファイルを取得します。このアプローチの唯一の問題は、オープンドームにする必要があるときに底がそこにあることです.
私はむしろmeshpyを使用したいと思いますが、これらのポイントを生成してからmeshpyにフィードすると、何も返されません...
from meshpy.tet import MeshInfo, build
# Generating all of the points using the functions
pts_circ = gen_pts_on_circle(100, 5)
points = np.vstack((pts_circle, gen_random_pts(500, 5)))
# Building with tet
mesh_info = MeshInfo()
mesh_info.set_points(points)
mesh = build(info)
print np.array(mesh.facets) と print np.array(mesh.points) は空の配列になりました。
すべてのファセットも設定せずにmeshpyを使用する方法、またはこのビルド方法を使用してコマンドラインtetgenのようにファセットを構築する方法について誰かアイデアがありますか? これは、ドームの底が開いていないという私の問題を実際に取り除くわけではありませんが、私が解決しようとしてきたことです. どんな助けでも大歓迎です。ありがとう!