三角剖分
来源:互联网 发布:c语言 乘法 溢出 编辑:程序博客网 时间:2024/04/29 06:25
一、凸包:对于一个平面点集V,包含V内所有点的一个最小凸多边形,就是该点集V的一个凸包。
二、Delaunay三角剖分:只包含Delaunay边的三角剖分。
三、Delaunay边:
1、定义:具有空圆特性的边。空圆特性:存在一个圆经过点集V内两点a、b,圆上至多3点,圆内不包含点集V内任何其他点,则边ab是Delaunay边。
2、必要条件(准则):
(1)空圆特性;(二维)
(2)最大化最小角。(二维,三维)
3、特性:
(1)最近性;
(2)唯一性;
(3)最优性;
(4)最规则;
(5)区域性;
(6)具有凸多边形外壳。
4、构造(优化处理):
LOP处理(局部优化过程)。
5、算法:
(1)lawson算法;
(2)bowyer-watson算法。
四、论文摘记:
1、《efficiently triangulation of a simple polygons》
算法:向最大多边形中的两端点间递归地插入对角线。
耗时O(n^2)。
2、《基于激光雷达的典型三维地面目标识别技术研究—刘瑶》(三维)
Delaunay三角剖分步骤:
- (1)遍历三维点云,寻找Z值最大点,作为种子点;
- (2)种子点为起点,寻找最近点,生成种子边;
- (3)遍历三维点云,寻找能与种子边满足最大化最小值原则的第三点,构成种子三角形,并放入delaunay三角形链表;
- (4)依次以种子三角形中各边为扩展边,重复步骤3;
- (5)以步骤四中的新三角形为起点,重复步骤4,直到所有点云插入完毕。
Delaunay三角剖分算法伪代码:
优化后算法伪代码:
4、《一种快速三维散乱点云的三角剖分算法》
常规三维三角剖分算法:
原算法是基于生长法剖分过程,其基本思想是首先生成
一个满足条件的三角形;然后以该三角形三条边为基础应用
边的扩展准则,向三个不同方向寻找满足条件的点,生长成
新的三角形;再以新三角形为基础向四周生长,直至循环扩
展完所有三角形。在进行边的扩展时主要是引入了空间离
散点集三角剖分的5条准则:
1)异侧准则
寻找点与待扩展三角形的第三点分置扩展边两侧,不能
位于待扩展边或其延长线上。为了使扩展后的曲面保持连
续平滑的特性,在扩展每一条边时,都应在与三角形第三点
相反方向上寻找符合条件的点。扩展之后新三角形的法向
量与原三角形的法向量方向相反。
2)法向量夹角最大准则(Anglesbetweennormals)
由于曲面具有光滑连续性,因而构成三角形时应使新三
角形与原三角形所构成的曲面尽量光滑,才会保证重构之后
的效果好。
3)阈值距离准则(Thresholddistancecriterion)
阈值距离将寻找点与待扩展边中点之间的距离限制在
一个阈值距离之内,使得边扩展时可以在一定范围内进行候
选点的比较。
4)最小内角最大准则(Max-minanglecriterion)
当按照法向量夹角最大准则和阈值距离准则进行点的
搜索时,还会遇到这样一种情况,对于边AB来说,空间中两
个点P和P′均在阈值距离之内,且它们与待扩展边AB两个
端点共面,即■ ABP和■ ABP′与■ ABC的法向量夹角相等,
在这种情况下,需要判断哪个点与AB所构成的三角形是最
优。算法规定最小内角最大准则,即新构成的三角形的最小
内角是所有可能构成的三角形最小内角中的最大值。
5)边的最大使用次数准则
为了保证在剖分过程中不出现三角形之间交叉重叠的
现象,限定每一条扩展边最多只能被两个三角形所共用,即
每一条边最大使用次数为2。
5、《三维散乱点集的曲面三角剖分》
对于三维空间散乱点云的曲面三角剖分方法,主要为平面投影法和直接剖分法。
五、三维三角剖分算法总结
算法伪代码:
六、改进算法
仔细分析原算法发现,其核心在于对每一待扩展边的扩
展。而原算法边的扩展大部分cpu时间都花在待扩展点的
搜索上,由于它在全局范围内搜索,很难进行快速的三角剖
分。特别是当点云数据逐渐增大时,此算法的复杂度成几何
级数增长。而实际上,很容易知道侯选的最优点通常在待扩
展边的邻域内,如果能仅对待扩展边邻域内的点进行搜索比
较而不是搜索整个点云空间将会极大的提高剖分效率。因
此,引入八叉树搜索的思想,对数据进行空间划分[8],从而把
对数据点的操作限制在邻域内,划分按以下步骤进行:
步骤1:计算散乱数据点的最小长方体包围盒,得到min
x,max x,min y,max y,min z和max z的值。
步骤2:将包围盒分为number x,number y和number z
个小立方栅格,分别对应x,y,z3个坐标轴方向。计算如下,
number x= (max x-min x)/edge
number y= (max y-min y)/edge
number z= (max z-min z)/edge (1)
其中edge为立方栅格的边长。
步骤3:以(x,y,z)为序,对立方栅格进行编号,划分得网
格如图1。
对散乱数据进行局部三角剖分,应首先读入数据点,建
立数据点及其邻近点之间的空间位置关系。为此,需要建立
数据点与立方栅格之间的相互对应关系。对任一数据点可
以用Hash函数方法求其所在的立方栅格号:
cell index=(xi/edge)+(yi/edge)×number x+
(zi/edge×number x×number y+ 1) (2)
即根据搜索目标的索引值,计算上下左右共26个栅格
邻域内的点。这种方法能够大大加快搜索速度,所要查找的
对象集的规模越大,该方法的优势越明显。
改进算法通过以下步骤来寻找某一数据点的临近点集:
1)由该点的序号通过Hash函数计算出该点所在立方
栅格序号。
2)根据立方栅格的编码方案,计算出其上下左右与之相
邻的共26个立方栅格的序号。
3)根据该立方栅格及其周围26个立方栅格的序号,由
立方栅格的存储结构通过指针运算查找到所有立方栅格内
的数据点,其集合除去该点本身即为该点的邻近点集。
其数据结构见表1。
优化后的算法流程图如下:
改进后的三维三角剖分算法。可同时保证实时性和准确性。
阅读全文
0 0
- Delaunay三角剖分
- Delaunay三角剖分
- 三角剖分
- 最优三角剖分
- 三角剖分详解
- Delaunay三角剖分
- Delaunay三角剖分
- 螺旋三角剖分
- 洋葱三角剖分
- 三角剖分详解
- Delaunay三角剖分
- 三角剖分浅析
- 三角剖分详解
- Delaunay三角剖分
- 三角剖分
- Delaunay三角剖分
- Delaunay三角剖分
- 最优三角剖分
- 微信错误:errcode=45015, errmsg=response out of time limit or subscription is canceled
- php 苹果内购支付
- (转载)说说Makefile那些事儿
- .创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个
- 在Java中,二维数组中计算行数和列数
- 三角剖分
- Gridview 中间分割线(一)
- 微信小程序——基础
- DS9208升级说明 V3
- 欢迎使用CSDN-markdown编辑器
- 基础练习 特殊回文数
- Leetcode494. 求解目标和个数
- BootLoader给Linux kernel传递的启动参数详解