众所周知,在绘制等高线、建立数字地面模型、数字高程模型的前提必须是完成散点组网。即将若干离散的点按照相应规则(delauny)有机的组织起来,可以采用三角形亦或是方格网,之后再将各个结点附上高程,一张三维网就出现了。有了这张网,地面的复杂形态就可以较为轻松的表示出来。
之后依托这个网就可以进行等高线的运算、模型的渲染.....等等操作。这些ok了,你可能会提出更高的要求,比如带约束的构网,构网范围内抠除某个区域,抑或是提高运算速度....
这些都会比单纯构网要复杂的多。具体的原理我会在后面的博文逐一介绍。今天我先讲一下triangle三角构网库,这个库不但运行效率高、并且能通过几个参数轻松的解决前面所述的全部问题。但是他的很多命令,很多人还是不清楚,以至于不知道如何上手。这篇博文在总结了我应用的基础上带领大家快速、轻松入门triangle使用!
目录
1.triangle库简介
这个库是目前采用的还是2005年发布的版本,底层是用C语言编写的,官网地址如下,可以在官网下载源代码查看:
这个库在python中也有延伸,python地址如下:
2.triangle库文件说明
2.1编译打包
因为源文件是C语言编写的,所以使用前你需要对他进行打包,或者你可以将源代码直接集成到你得程序里,有关如何打包,在源代码的README文件中有说明,也可以参考下这个博主写的文章。在Ubuntu18.04上编译SUNTANS模型_HHU_HuLihan的博客-CSDN博客在Ubuntu18.04上编译SUNTANS模型SUNTANS模型编译准备下载源代码所需库的安装MPICH的安装ParMetis的安装Triangle的安装编译SUNTANS模型测试算例SUNTANS模型SUNTANS模型是非静压(Non-Hydrostatic)三维海洋模型。其中,SUNTANS是Stanford Unstructured Nonhydrostatic Terrain-following Adaptive Navier-Stokes Simulator的缩写。该海洋模型的控制方程为Bohttps://blog.csdn.net/weixin_42848392/article/details/114308892
2.2输入文件说明(poly)
很多小伙伴一上来会被一堆文件弄的头晕眼花,其实triangle只认.poly文件,你的程序在使用之前,只需要按照规则编写.poly文件,扔给triangle即可构网。poly文件格式的介绍如下:
poly文件分为三个部分:点、线(边)、洞
poly文件demo。
注意:
① .poly文件本质是文本,但后缀为.poly;文件中“#”开头为注释内容,不会参与构网!
②“点”部分若“属性”为0,则后续点不必写出该“属性”标记
③“点”部分若“边界标记”为0,则后续点不必写出该“边界标记”
④“点”部分若“边界标记”为1,则后续点在“边界标记”位置应给出数字标记(相同边界应标记相同数字)
⑤“边”部分若“边界标记”为0,则后续边不必写出“边界标记”
⑥“边”部分若“边界标记”为1,则后续点在“边界标记”位置应给出数字标记(相同边应标记相同数字)(与“点”部分要一致)
⑦“洞”部分一定要给出洞的数量,如果没有孔洞,就标记0
⑧“洞”后续部分应标记洞的中心坐标【不是索引】【只要在洞的内部即可】
2.3常用命令
在编写完poly文件后,配合指定的命令,triangle就可以快速构网(实测67个万点构网仅5秒)。triangle命令很多,但是常用的就这几个,我简单说一下都能干嘛!想看完整文档的请点击连接:
注意:
①命令区分大小写字母
②命令可以任意组合搭配
-c:自动计算离散点的凸包范围,并将最外围点连起来作为图形边界进行构网
-p:约束构网命令,存在约束线的情况一定要用
-q:优化生成的三角形最小角的大小,-q0,-q30......后面跟着的数字影响三角形最小角的大小
-a0.05:指定三角形的最小面积为0.05㎡
-D:尽可能让三角形满足delauny三角构网原则
我常用:-cpqD
2.4输出文件说明
triangle在给定输入文件poly文件后,一般情况下会自动生成3个辅助文件,后缀依次是.ele/.1.poly/.node。这三个文件分别记录着不同内容,可以根据需要进行获取,本质上还是文本文档。
.ele文件【最核心】:记录着所有的三角形,每一行代表一个三角形,三角形顶点是点的索引(坐标可根据poly文件或node文件获取)。
.node文件:记录所有的节点【基本上是poly文件“点”的内容】
1.poly文件:记录所有的边【基本上是poly文件“边”的内容】
3.总结
当triangle能正常生成上述三个文件的时候,就证明组网成功了,将ele文件可视化就是你想要的网型!篇幅有限,后续我将逐步深化各个部分的讲解。欢迎大家评论区留言交流!