螺旋三角剖分
来源:互联网 发布:java 的remainder 编辑:程序博客网 时间:2024/04/29 09:05
点集的螺旋三角剖分是基于集合螺旋凸包的三角剖分图。
凸螺旋线可以通过如下方法构造:
- 从一个特定的端点开始(比如给定方向上的最小点), 这里取有最小 x 坐标的点。
- 通过那个点构造一条铅垂线。
- 按照一个给定的方向旋转线(总保持顺时针或者是逆时针方向), 直到线“击” 出另一个顶点。
- 将两个点用一条线段连接。
- 重复步骤3和步骤4, 但是总忽略已经击出的点。
大体上, 这个过程类似于计算凸包的卷包裹算法, 但是不同在于其循环永远不会停止。 对于一个凸包上有 h 个点的点集, 存在 2h 个凸螺旋线: 对于每个起点有顺时针和逆时针螺旋线两种。
一个点集(左边), 及其顺时针凸螺旋线, 以最小的 x 坐标点作为初始点。
有趣的是, 一个点集的凸螺旋线和洋葱皮可以在线性时间内相互转换。 进一步的, 类似于洋葱三角剖分, 我们可以定义一个点集的子图为凸螺旋线的螺旋三角剖分。
构造螺旋三角剖分的算法, 虽然是基于环面三角剖分的, 但是却更为复杂, 因为螺旋线必须被分割为合适的凸包链。 假设输入是一个点集的顺时针凸螺旋线 C , 且有 C = { p1 , ... , pn } 。
- 将凸螺旋线的边作为三角剖分的边插入。
- 从 p1 开始, 寻找点集凸螺旋线上的最后一个点 ph 。
- 延长凸螺旋线上的最后一条边 [p(n-1),pn] 直到其与凸螺旋线相交。 标记交点为 q' 。
- 构造与 C 切于点 q' 的切线。 逆时针旋转那条线直到他与 C 相交于一点 q 并且平行于 [p(n-1),pn] 。
- 将 [p(n-1),q] 插入三角剖分中。
- 此操作后将凸螺旋链分割称了两个部分: 链外的部分和链内的多边形区域。 设 Co = { p1 , ... , q } 且 Ci = { ph , ... , q , ... , pn } 。 这个构造过程如下图所示:
左上角: 构造过程。 右上角: 螺旋外和内部的多边形区域。 底部: 外部和内部的凸链 Co 和Ci 。
- 外部螺旋区域可以如环面一样进行三角剖分。 Co 和 Ci 此时可以被看成一个嵌套凸包。
- 内部的多边形区域可以很容易的在 pn 处星型划分形成三角剖分。
- 这两个三角剖分的组合构成了整个螺旋三角剖分的结构。
一个螺旋凸包的例子和其三角剖分如下所示:
上述的算法是线性时间复杂度的, 算法的时间依赖于环面剖分的运行时间。
原文地址:http://cgm.cs.mcgill.ca/~orm/sptri.html
- 螺旋三角剖分
- 旋转卡壳——螺旋三角剖分
- 旋转卡壳——螺旋三角剖分
- Delaunay三角剖分
- Delaunay三角剖分
- 三角剖分
- 最优三角剖分
- 三角剖分详解
- Delaunay三角剖分
- Delaunay三角剖分
- 洋葱三角剖分
- 三角剖分详解
- Delaunay三角剖分
- 三角剖分浅析
- 三角剖分详解
- Delaunay三角剖分
- 三角剖分
- Delaunay三角剖分
- 错误 2 (net::ERR_FAILED): 未知错误
- 究竟我们为什么要学C语言呢
- Linux 下摄像头驱动支持情况
- 计算机广告学视频
- UIKit各类概述
- 螺旋三角剖分
- Sum Root to Leaf Numbers
- Hamming Codes
- 洋葱三角剖分
- 四边形剖分
- Python学习之路一 开发环境的配置
- 合并凸包
- Collections的使用
- html页面导入文件 使用include后多出一空白行的解决