三角网算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三角网算法
(2010-11-15 10:54:01)
原作:Paul Bourke / 1989.1 翻译:robter_x
原文出处:
.au/~pbourke/terrain/triangulate/
这是一个适用于地形模型的三角网算法。
摘要(略)
介绍
有很多技术能够应用于表面插值,也就是说,已知一些采样点高度,求与这些采样点接近的某点的高度。一些常用的方法是邻接插值,表面补丁,二次曲面,多边形插值,样条插值和下面将要描述的丹尼三角网(Delauney Triangulation)。一些插值方法经常应用于经验数据的显示,例如,地形模型中的原始数据来源于调查,气象中心的气象分析数据,或有限元分析筛选出的数据等。
这篇文章讨论的技术不仅适用于地形模型,而且适用于其它方面,这个技术具有下列特点
有一些地方的采样点密度高,而另一些地方的采样点密度低。例如,在地形模型中,一般水边界的内部的采样点呈低密度分布,而在一些较复杂的地方,采样点呈高密度分布。
由于地形表面的不连续,导致采样平面上的采样点较密集。这些可能是自然情况,如,悬岩和河岸,也可能是人工制造的不连续,如围墙。很多平滑方法不能很好的处理这种情况,特别是那些基于多边形的函数将导致表面尖突,摆动和不稳定。
采样点经常沿着等值线分布,这是由于采样点的来源可能是等值线图或者地质调查组的实际勘探。这是导致采样点密度不一致的另一个原因。沿着采样点曲线有较高的采样点密度,而与采样点曲线垂直的路径,除非遇到另一条采样点曲线,否则,没有采样点。
经常需有处理大量的采样点。对一个适用的技术来说,随着采样点数量的增加,处理采样所需的时间应该适度的增加。典型的采样点数量一般是100~100000,对于一个自动化的取样方法来说,通常会有这么大数量的采样点。
获得的采样点一般是逐步增多的。最初获得的采样点被分析,对于感兴趣的地方可能会增加采样密度。很显然,在分析结果上增加一些新的采样点来进一步分析比对所有的采样点重新分析要有利。
算法应该适合在普通的台式机上运行,这些台式机不可能有大量的内存,磁盘空间和高速处理器。
这儿讨论的技术已经成功的应用于地形模型,它处理了地形数据所涉及的上述几个方面,并且能很容易的导出网格和产生等值线。
三角剖分
三角剖分是指把一系列采样点划分为不覆盖的有边界的三角形区域,三角形的顶点是已知的采样点。已被提出的三角剖分算法有很多种,而最流行的算法是径向扫描算法和用来实现丹尼三角网的Watson算法。
丹尼三角网在几何学上是与Direchlet网格密切相关的,而Direchlet网格又被称作Voronoi or Theissen网格。这些网格把平面划分为许多多边形区域,每一个多边形区域内有一个采样点,这个采样点称作发生点,而在这个多边形区域中的所有的其它点都与发生点较接近。把共用同一个边的邻接多边形的发生点连接起来形成丹尼三角网。这样连接之后,三角形的边垂直平分多边形的边。
图一丹尼三角网(细线)通过9个发生点与Direchlet网格(粗线)关联,三角网的边垂直正交多边形的边。在多边形内的点与这个多边形的发生点较接近,而与其它发生点较远。
这样的三角网有一些满足要求的特征。三角形的三条边尽可能的相等,从而避免尖锐三角形的出现。
除了个别情况,通过这种方法得到的三角网是唯一的(即不管采样点如何排列)。一个个别情况的例子是:四个点位于矩形的四个角上,它们只能用两种方法来进
行三角剖分。这种情况在实际数据中很少碰到,如果觉得唯一性更重要,可以对这四个点中的一个或多个点施加一些微小的位移。
有一种使用其它技术效果不太好的独特的情况,就是采样点密度不一致的区域混合在一起的情况。基于这个方法的三角剖分很好的解决了这种情况,对高密度采样点区域划分了更多的三角形,因此,也更详细,而对低密度采样点区域划分较少的三角形,因此,没有这么详细。
不连续区域的处理是十分自然的。不连续区域能尽可能的窄,这完全取决于采样要求,它仅仅是导致了几近直角的三角形的出现。然而,请注意,除非有特别的操作,否则,采样平面上不应该有两个完全重叠的采样点,除非这两个采样点有不同的海拔高度。这种情况可能发生在数字化相距很近的不连续区域时获得的离散点。解决这个问题的方法是给这个采样点在正确的方向上施加一些微小的位移。
实现这种三角剖分的算法是十分高效的,并且对含有大量采样点的区域是十分合适的。如果以后获得了更多的采样点,可以把这些新获得的采样点添加到已经计算好的三角网中,而不用对所有的采样点进行重新三角剖分。这使得可以用一种高效可能的方法对一个区域进行更加详细的剖分。
形成的平面可以作为进一步形成平面的多边形使用,或者也可以用一种规则网格产生采样点。给出包含多边形的一系列三角形是一件简单的事,那就是找到一个多边形,它在采样平面上的投影包含指定的采样点。多边形在网格点上交点就是高度值。另一个求网格上点的值的方法是使用Direchlet网格而不是三角网格。这就避免了第一种方法容易产生大角度和小角度的角的情况。显然,这更吸引人,因为对应一个区域的网格影响采样点。等值线图可以从三角网格或分布在矩形网格中的采样点直接产生。如果能获得网格数据,则产生平滑的表面也是比较容易的。(译者注:本段表达不清楚,但不影响算法的描述)
算法
在三角剖分过程中的任何一个阶段,需要有一个存在三角网,一个新的采样点被添加到这个存在的三角网中。通过产生一个超级三角形来对这个处理过程初始化,这个超级三角形就是人工设定的包含所有采样点的三角形。在三角剖分过程的最后,任何与超级三角形有共享边的三角形都将从三角形集合中删除。
图2a新的采样点被添加到存在的三角网中
所有的三角形,如果它的外接圆包含了新添加的采样点,则对这些三角形作标记,这些已标记的三角形的外边形成一个包围多边形。(三角形的外接圆是指三角形的三个顶点落在圆周上)。
图2b三角形的外接圆包含新的采样点,所有这些三角形的外边形成一个包围多边形
在包围多边形内的三角形都被删除,新添加的采样点与包围多边形的外边形成新的三角形。