Triangle - Delaunay Triangulator 平面多边形的三角网格化工具

Triangle是一个C语言编写的开源三角网格化工具,用于平面多边形的三角划分。博客介绍了Triangle中用到的数据结构,如vertices、triangles和subsegments,并详细解释了编译时遇到的C++与C兼容性问题以及解决方案。此外,还讨论了如何在外部程序中调用Triangle,强调了定义TRILIBRARY的重要性以及使用triangulateio结构体进行网格划分的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

triangle中用到的数据结构

三种:vertices,triangle和subsegments。一个vertex包含mesh中的点和它本身的属性。subsegments包含外边界边,孔(hole)的边界边以及内部边界边中分离两个triangle的部分。subsegments是用户自己定义的边界。一个triangle包含一个三个点的list,三个相邻三角形的list,三个相邻subsegments的list,任意数量用户自定义的浮点数特性,可选的区域限制(区域中每个三角形允许的面积上限,用于细化三角形)。

编译时出现的错误

Triangle是C语言编写的开源库,是非常好用的平面三角网格划分工具。
在C++工程中,如果出现:

1>Mesh3D.obj : error LNK2019: 无法解析的外部符号 "void __cdecl triangulate(char *,struct triangulateio *,struct triangulateio *,struct triangulateio *)" (?triangulate@@YAXPADPAUtriangulateio@@11@Z),该符号在函数 "public: void __thiscall Mesh3D::DoTriangle(void)" (?DoTriangle@Mesh3D@@QAEXXZ) 中被引用
1>D:\SHANGHAI-ITECH\homework\Sketching Interface\Win32\Debug\\Interfacefor3D.exe : fatal error LNK1120: 1 个无法解析的外部命令

需要注意在#include “triangle/triangle.h”处需要添加extern “C”。


triangle.h中的triangulate()是重载函数,由于C与C++编译器对重载函数的处理方式不同,导致连接器找不到正确的triangle函数,所以才会出现上文中的LNK1120:无法解析的外部命令错误。

#ifdef ANSI_DECLARATORS
void triangulate(char *, struct triangulateio *, struct triangulateio *,
                 struct triangulateio *);
void trifree(VOID *memptr);
#else /* not ANSI_DECLARATORS */
void triangulate();
void trifree();
#endif /* not ANSI_DECLARATORS */

在包含头文件前,加上extern “C”可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值