学习使用Triangle库

  • 简介
  • 编译
  • 输入文件
  • 实例
    • 编辑输入文件
    • 生成网格
    • 网格文件的数据结构
      • *.node文件
      • *.ele文件

简介

Triangle是由Jonathan Shewchuk开发的,用于实现平面二维Delaunay三角网格生成的开源代码库。Triangle官网
Triangle程序能够依照Delaunay准则生成高质量的三角网格、有约束条件的三角网格及Voronoi图等;所得网格可用于CFD或有限元分析
注:Delaunay准则即所生成网格中,任一三角形顶点都不能包含于网格内任何三角形的外接圆内。
程序代码采用C语言编写。并自带一个用于后处理/可视化的代码块(showme.c);在Linux系统下,可以使用showme所编译生成的可执行文件,来查看网格图。

编译

代码的编译详见博客文章在Ubuntu18.04上编译SUNTANS模型

输入文件

Triangle程序的输入是一个平面的、由多段直线构成的图形(又称Planar Straight Line Graph, PSLG)。
根据官网的说明,我拆解并分析了输入文件(*.poly)所包含的内容;输入文件的结构如下所示:

#第一部分
## 第一行: <结点总数> <图形维数(对于poly文件,该值必须为2)> <是否有结点属性值(0 or 1)> <是否有边界点标记(0 or 1)>
## 另起一行,按下列格式输入数据:<结点编号(一般以1,2,3...顺序依次输入)> <结点x坐标> <结点y坐标> [结点属性值]  [结点边界标记]#第二部分
## 第一行: <边的总数> <边是否有边界标记(0 or 1)>
**注意:上述的边(segment)指强制存在于网格区域或人工输入的边。
## 另起一行,按下列格式输入数据:<边的编号(一般以1,2,3...顺序依次输入)> <端点序号> <另一端点序号>  [边的边界标记]#第三部分
## 第一行: <网格剖分区域内空心区域的个数>
## 另起一行,按下列格式输入空心区域的形状(输入区域外轮廓坐标):<外轮廓上点的序号(一般以1,2,3...顺序依次输入)> <该点的x坐标> <该点的y坐标>#第四部分(可选,非必要)
#可选的第四部分列出了区域属性值和最大三角形区域的区域约束的设定。只有当使用-A指令或者使用-A指令后没有数字,并且没有使用-r指令时,Triangle工具才会读取这部分内容。该设置点所包含的参数将适用于整个子区域或空心区域。
## 第一行: <需要设定属性值或最大三角形面积的区域块数>
## 另起一行,按下列格式输入数据:<设置点的编号(一般以1,2,3...顺序依次输入)> <该点的x坐标> <该点的y坐标> <设定的属性值> <该区域内最大三角形面积>

(网格设定的逻辑类似于DHI MIKE软件包中的MeshGenerator)

实例

编辑输入文件

## Part 1: 4 vertices of a rectangle of 5m by 1m ##
4 2 0 0 # 4 points,  2-dimension
# makers x y (of the points)
1 0. 0.
2 5. 0.
3 5. 1.
4 0. 1.
## Part 2:  4 segments of rectangle with boundary markers ##
4 1       # 4 segments and these segments have marks
#Number. , makers of the start- and end- points, marks of segments
1 1 2 1 # south, mark=1
2 2 3 1 # east, mark=1
3 3 4 1 # north, mark=1
4 4 1 2 # west, another marker for this side, mark=2
## Part 3:  holes (no holes in this case) ##
0
## Part 4: (no Part 4 in this case) ##

(注:#号后面的内容输入注释,每行#号后侧内容无法被程序读入)
在Triangle文件夹中新建一个名为 rectangle.poly的输入文件,并将上述内容输入到该文件中。

生成网格

之后,在Triangle文件夹中打开终端,输入下列指令:
(注:以下操作均以Ubuntu系统下的操作为例)

./triangle -pq30a0.05I rectangle

上述指令的含义是:

# -p :   读入文件 * .poly
# -q30  :   指定三角形的最小角为30°
# -a0.05    :   指定三角形的最小面积 0.05 (平方米)
# -I    :   网格迭代次数

输出的文件包含:

  1. *.node文件:包含顶点(或节点)的平面坐标(x,y);
  2. *.ele文件:包含三角形(或元素)的拓扑表信息,这个表信息的各行表示各个三角形的节点号(按逆时针顺序)。

之后可以使用以下指令查看生成的网格:

./showme rectangle

网格文件的数据结构

*.node文件

.node文件的结构如下所示:

##第一行##<节点总数> <图形维数(一般就是2)> <是否有结点属性值(0 or 1)> <是否有边界点标记(0 or 1)>##余下各行##
<节点编号> <节点x坐标> <节点y坐标> [节点属性值(当第一行第三个参数为1时,才需输入此属性值)] [该节点的边界点标记(当第一行第四个参数为1时,才需输入此标记值]

以rectangle.node中的部分内容为例:

101  2  0  11    0  0    12    5  0    13    5  1    14    0  1    15    2  0    16    2.5  1    17    1.25  1    18    1  0    19    3.5  0    110    1.875  1    111    1.9780358181140232  0.4667395054897327    012    2.1875  0.53125    0...(以下省略)

上面的第一行表示余下共有101个节点的信息,即除了第一行外,余下共有101行;并且各点带有边界点标记。此外,我们从中可知,第一个节点的坐标为(0,0),其边界点标记为1,第十二个点的坐标为(2.1875,0.53125),其边界点标记为0(其余各行的信息以此类推)。

*.ele文件

.ele文件的结构如下所示:

##第一行##<三角网格总数> <三角形各顶点的节点编号(由三个数字构成)> <网格中心是否有属性值(0 or 1)> ##余下各行##
<网格编号> <节点1> <节点2>  <节点3> ... [网格中心属性值]

以rectangle.node中的部分内容为例:

159  3  01      47    43    412      19    21    153      82    84    794      75    28    705      70    84     86      13    29    117      98     6    218      75    70    749      15    14    2410      31    30     5...(以下省略)

上面的第一行表示余下共有159个三角形网格的信息,即除了第一行外,余下共有159行;并且各网格中心无属性值。此外,我们从中可知,第一个三角形网格由节点编号为47、43、41的三个节点构成,其中的节点编号参考对应的.node文件(其余各行的信息以此类推)。

学习使用Triangle库相关推荐

  1. 目前最好用的大规模强化学习算法训练库是什么?

    点击蓝字  关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...

  2. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  3. 强化学习环境全库安装(从mujoco到spinningup)

    强化学习环境全库安装 从mujoco200到spinningup (上篇) 前言 一: 安装Mujoco200物理引擎 二. 创建conda虚拟环境 1:选择python版本 2.创建conda虚拟环 ...

  4. 深度学习常用python库学习笔记

    深度学习常用python库学习笔记 常用的4个库 一.Numpy库 1.数组的创建 (1)np.array() (2)np.zeros() (3)np.ones() (4)np.empty() (5) ...

  5. 多线程爬取学习通题库

    今天在网上发现了一个学习通题库网站,正好最近也在研究怎么搭建题库,于是就写了一个多线程爬虫,爬取网站所有的题目. 下面是我写的代码 import requests import re from lxm ...

  6. 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付

    █ [安卓学习之第三方库] Rxpay学习:支付宝微信支付 █ 相关文章: [安卓学习之第三方库]库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例) [安卓学习之第三方库] 消息 ...

  7. 【安卓学习之第三方库】 人脸识别SDK

    █ [安卓学习之第三方库] 人脸识别 █ 相关文章: - ● [安卓学习之第三方库]库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例) ● [安卓学习之第三方库] 消息推送之极光 ...

  8. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  9. 【jQuery】学习一下JS库——jQuery

    [jQuery]学习一下JS库--jQuery jQuery 一.jQuery对象 01. 基本概念,区分DOM对象和jQuery对象 02. 两个对象之间的转换 二.jQuery的使用方法 关于隐式 ...

最新文章

  1. 富文本编辑_博客的后台富文本编辑和阅读计数
  2. 使用tomcat搭建Jenkins环境(centos7.3)
  3. 参数迁移表达的第三种形态相互作用
  4. HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
  5. happens-before规则和指令重排
  6. Jenkins构建之常用的触发器和Git Hook自动构建
  7. oracle 数据库备份恢复
  8. 带有Oracle Digital Assistant和Fn Project的会话式UI
  9. 前端学习(3111):react-hello-复习相关知识
  10. 万年历查询系统理解与功能增添
  11. SQL解析利器General SQL Parser
  12. 电商刮刮卡开发基础准备
  13. R+markdown+LaTeX 中文编译解决方案
  14. [转载] python创建集合set()_Python 集合set()
  15. SONY重拳出击,开始涉足移动领域----Playstation Mobile必然崛起
  16. 【DFS】Gym - 100781A - Adjoin the Networks
  17. JZ2440.jflash配置
  18. 【计算机网络】(二)网络技术与应用
  19. 基尔霍夫电流定律KCL和基尔霍夫电压定律KVL
  20. 【C语言学习04】跳出嵌套循环

热门文章

  1. 福建电信的计费查询平台应用--案例
  2. python getopt模块
  3. linuxQQ总是掉线问题
  4. JDBC原理及使用步骤
  5. matlab摩托车刹车问题,摩托车刹车遇到锁死的情况,该怎么办?
  6. alians mysql_转:PHP 配置全攻略之Windows篇
  7. 如何正确的区分ByName和ByType?别纠结了!!!
  8. html dom getattribute,DOM Element对象getAttribute()方法
  9. Android IT新闻阅读器与手机二维码
  10. 虹科分享|终端安全防护|您的遗留系统的安全性如何?