2019.4.11--4.12
一:Delaunay三角剖分-分治法(Divide and conquer)
1: 散乱点云排序,按照x从小到大,若x 相同则按照y从小到大排序
(图1)原始点集排序 (图2)将点集分割成每个子集个数不大于3的点集
2:划分子集,将所有点集递归的划分两个数量相近的子集,每个子集的点数不大于3.
如何递归的划分子集并保存子集数据。
递归分割:(输入左侧最大子集,右侧最大子集)
如果左侧最大子集个数>3;递归分割
否则保存左侧数据
如果右侧最大子集>3;递归分割
否则保存右侧数据
获得左侧第一个最小子集及右侧第一个最小子集
3:合并规则定义:LL边:边的两点坐标均在分割线左侧,
LR边:边的两点左边一个在左侧,一个在右侧,及两点之间的连线与分割线相交,
RR边:边的两点坐标均在分割线右侧
(图3)左侧子集合并 (图4)右侧子集合并
确定一条LR基线,位于最下方且不与其他线相交
(图5)LR基边确定 (图6)第二条LR边相对基边角
3.1 分割线怎么确定?需要保存吗?分割线根据点的索引位置来划分,保存分割后的点,自然就得到分割线的坐标了
3.2 代码中怎么定义边的类型,代码如何实现? 用边的两点坐标的值小于分割线,则为LL边,两边大于分割线则为RR边, 否则为RL边。利用排序后坐标的索引来分割边,当两个子集合并成一个父集时,需要更新边的相对定义。
3.2 查找LR基线,如何确定基线? 找出LL边y值最小和RR边y值最小
图(7)第二个候选点在圆内的情况 (图8)判断下一个潜在候选点
4:根据确定的基线,选定下一条LR边。候选点如何选取? 需要保存到数组? 候选点存入临时数组,更新使用
利用角度搜索,两个规则:
4.1 LR边判定时需要外接圆内不包含下一个候选点,如果包含下一个候选点,则需要删除边。
4.2 角度小于180度
(图9)利用空圆特性连接候选点
(图10)连接新的LR边
5:合并左右两个子集(输入左右,右侧,此时只有最小单元),按照规则合并左侧、右侧数据,更新为左侧。同时根据排序的规则,可以利用左侧的数据读取右侧两个最小单元的数据,合并后更新为右侧,更新候选点,再次递归。直到所有点都加入完成,不在有新增的候选点,退出索引,网格划分完成。
翻译自: http://www.geom.uiuc.edu/~samuelp/del_project.html
参考文献 [1] https://www.jianshu.com/p/172749e6116a
[2]https://www.sciencedirect.com/science/article/pii/S0010448597000821