首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tetgen或三角形(或meshpy)创建中空的圆顶

使用tetgen或三角形(或meshpy)创建中空的圆顶
EN

Stack Overflow用户
提问于 2015-03-18 06:32:54
回答 1查看 1.4K关注 0票数 0

我正在使用tetgen尝试创建一个中空的圆顶。我使用三角形,然后根据方程z= sqrt(abs(r^2 - x^2 - y^2))三角剖分一个圆并提高z值,但我在靠近边缘的地方伸展得很差。

所以我只想生成这个圆顶的一堆点,然后在不填充的情况下对其进行网格划分。Tetgen基本上是通过给出.node和.faces文件来为我做这件事,但问题是我仍然在寻找底部,我不确定如何摆脱它。我对tetgen和meshpy非常陌生,所以如果有人能给我一个工作流程,我将不胜感激。答案可能真的很简单。

例如,我可以用一个简单的函数在圆的底部周围创建点:

代码语言:javascript
复制
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)

然后,我使用以下函数在圆顶上生成随机点:

代码语言:javascript
复制
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中并不会返回任何东西……

代码语言:javascript
复制
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而不同时设置所有的facet,或者使用这个build方法来构建facet,就像命令行tetgen所做的那样?这并没有真正解决我的问题,尽管圆顶的底部没有打开,但我一直在努力解决一些问题。任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-04-15 01:25:53

为了防止其他人想要这个答案,我从meshpy的创建者那里得到了这个答案。基本上,您需要覆盖选项以摆脱默认的“pq”命令。所以

代码语言:javascript
复制
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)

希望这篇文章能帮助那些遇到同样问题的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29110976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档