使用tetgen或三角形(或meshpy)创建一个空心圆顶

时间:2015-03-17 22:32:54

标签: python mesh tetgen

我使用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,但是生成这些点,然后将它们送入网状物中,这样就不会返回任何东西......

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那样的方面?这并没有真正解决我的问题,即圆顶的底部是不开放的,但我一直试图解决的问题。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

以防万一其他人正在寻找这个答案我是从meshpy的创建者那里得到的。基本上你需要覆盖选项以摆脱默认的' pq'命令。所以

from meshpy.tet import MeshInfo, Options, build

opts = Options("") # Overriding 'pq' with no options or flags
mesh_info = MeshInfo()
mesh = build(mesh_info, options=opts)

希望这可以帮助任何偶然发现同样问题的人。