Python中的简单网格生成器
项目描述
PyDistMesh 是一个简单的Python代码,用于使用 符号距离函数 生成无结构的三角形和四面体网格。它旨在具有与基于MATLAB的 DistMesh 相同的功能和类似界面。像DistMesh一样,它基于DistMesh,并按照 GNU GPL 进行分发。
2-D 示例
单位圆上的均匀网格
>>> 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)])
3-D 示例
3-D 单位球
>>> 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兼容。(作者仅在Python 2.7和Python 3.2上进行了测试)。它需要几个常见的Python包
matplotlib(可选)
参考文献
以下两个参考文献中描述了 DistMesh 算法。如果您在程序或出版物中使用该算法,请通过添加以下第一篇论文的引用来承认其作者。
项目详情
关闭
PyDistMesh-1.2.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f45010037c312f21f742ec83e640eda314455f4428a9c46567f128c82600d986 |
|
MD5 | c45719fdf1e545b55274cf04ba1082aa |
|
BLAKE2b-256 | 393cfef5c2f4882128e093ec308c2c0c29a37a1f5001a03423863728b0c8c000 |