论文部分内容阅读
计算几何、图形学、实体模型、数值模拟以及其它一些领域经常要应用三角剖分,它是计算几何中的一个非常重要的分支。Delaunay三角网格具有最大角最小化,最小角最大化以及空圆性等性质,通常被认为是最优的三角剖分网格。Triangle能自动生成二维Delaunay三角剖分、约束Delaunay三角剖分和Voronoi图。它具有计算速度快、高效存储和健壮等特点,能细化生成高质量网格,并接受用户自定义约束条件如角度和三角形面积限制条件以及“洞”和“凹、凸”等。因此,Triangle经常被应用到地理建模应用研究中。
在地理应用中,由于数据往往非常大,浮点误差会导致程序崩溃。本文分析了实际地质建模的案例,发现Triangle在插入约束线时,会因为插入了几乎重合的点而导致Triangle程序出现死循环,进而崩溃。进一步的实验表明,如果我们对上面案例的点坐标,作一个平移,从而把点坐标减小,然后再用Triangle作CDT剖分,则能成功的剖分出来,这表明浮点数太大,导致的浮点误差造成了上述死循环的情形出现。因此,有必要对Triangle算法作改进,避免这种情形的出现,并满足地理建模的需求。
Triangle用符号面积来判断线段PiPm是否在有向三角形ΔPiPkPj(Pi为org点)的角域内,特别地,由符号面积是否为零,来判断线段是否与有向三角形左共线或者右共线。对于浮点数来说,判断一个浮点数等于零,通常是通过判断其绝对值是否小于一个给定的充分小的正数ε来实现的。因此,Triangle判断共线的方法值得商榷,尽管Triangle已经采用了经济实用的精确计算的手段来弥补浮点运算误差的影响,但这对于数据大小较小的情形也许是合适的,但对于规模和数据都非常大的问题未必都能适合。本文提出了两个新的判断线段是否在有向三角形的角域内的算法(算法4.4和4.5)。如在判断线段PiPm是否与ΔPiPkPj左共线时,在符号面积足够小的的基础上,加上了一个相对值h/l足够小(h是点Pm到△PmPiPj的边PiPj的距离h,l是边PiPj的长度丨PiPj丨)来确定是左共线的,这个相对值进一步地反映了线段PiPm与三角形ΔPiPkPj的边PiPj的共线程度。数值试验表明:改进后Triangle更加稳定、健壮,能够克服数据大和浮点误差带来的影响,并满足地理建模的应用需求。