python中的简单网格生成器
PyDistMesh的Python项目详细描述
PyDistMesh是一个简单的python代码,用于生成非结构化的 使用有符号距离函数的三角形和四面体网格。它 打算具有与 基于Matlab的DistMesh。就像distmesh,它的基础, PyDistMesh分布在GNU GPL下
二维示例
单位圆上的均匀网格:
>>> import distmesh as dm >>> import numpy as np >>> fd = lambda p: np.sqrt((p**2).sum(1))-1.0 >>> p, t = dm.distmesh2d(fd, dm.huniform, 0.2, (-1,-1,1,1))
带圆孔的矩形,在圆边界处细化:
>>> import distmesh as dm >>> fd = lambda p: dm.ddiff(dm.drectangle(p,-1,1,-1,1), ... dm.dcircle(p,0,0,0.5)) >>> fh = lambda p: 0.05+0.3*dm.dcircle(p,0,0,0.5) >>> p, t = dm.distmesh2d(fd, fh, 0.05, (-1,-1,1,1), ... [(-1,-1),(-1,1),(1,-1),(1,1)])
三维示例
三维单位球:
>>> import distmesh as dm >>> import numpy as np >>> fd = lambda p: np.sqrt((p**2).sum(1))-1.0 >>> p, t = dm.distmeshnd(fd, dm.huniform, 0.2, (-1,-1,-1, 1,1,1))
带孔气缸:
>>> import distmesh as dm >>> import numpy as np >>> def fd10(p): ... r, z = np.sqrt(p[:,0]**2 + p[:,1]**2), p[:,2] ... d1, d2, d3 = r-1.0, z-1.0, -z-1.0 ... d4, d5 = np.sqrt(d1**2+d2**2), np.sqrt(d1**2+d3**2) ... d = dm.dintersect(dm.dintersect(d1, d2), d3) ... ix = (d1>0)*(d2>0); d[ix] = d4[ix] ... ix = (d1>0)*(d3>0); d[ix] = d5[ix] ... return dm.ddiff(d, dm.dsphere(p, 0,0,0, 0.5)) >>> def fh10(p): ... h1 = 4*np.sqrt((p**2).sum(1))-1.0 ... return np.minimum(h1, 2.0) >>> p, t = dm.distmeshnd(fd10, fh10, 0.1, (-1,-1,-1, 1,1,1))
演示
要快速演示,请运行:
$ python -m distmesh.demo2d
或:
$ python -m distmesh.demond
依赖关系
pydistmesh与python 2和python 3都兼容。(作者 只在Python2.7和Python3.2中测试过。它需要几个 常用python包:
参考文献
DistMesh算法在下面的两个引用中进行了描述。 如果在程序或出版物中使用该算法,请 通过在第一篇论文中加上参考文献来感谢作者 下面。