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包:

构建包需要一个C编译器和LAPACKCython,如果 可用,可用于重建扩展模块绑定。

参考文献

DistMesh算法在下面的两个引用中进行了描述。 如果在程序或出版物中使用该算法,请 通过在第一篇论文中加上参考文献来感谢作者 下面。

  • P.-O.Persson,G.Strang,一个简单的MATLAB网格生成器siam review,第46(2)卷,第329-345页,2004年6月(PDF
  • p.-o.persson,隐式几何图形的网格生成。 博士论文,数学系,麻省理工学院,2004年12月(PDF

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate会话。save()不返回值吗?   java JMS应用程序发布订阅   java使用字符串创建一个长度为n,高度为n的正方形   java如何在MySQL的SQL查询中传递ArrayList<>如IN子句   安卓 java。lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin。jvm。内部的内在的。检查参数不完整   如何用Java绘制交互式图形/线条?   java Blackberry移动Web应用快捷方式   java Json LocalDateTIme问题   java更改密钥的颜色   java在过滤条件之后在流上迭代时如何获取上一个对象   Java:按位和创建无符号字节   java在JavaScript中检索Velocity循环变量   java JButton不会出现在GUI上   java Cell API json转换到POJO   java在模拟中初始化静态最终变量