CGAL的二维折线简化

1、介绍

        此软件包允许简化多段线,并保证多段线的拓扑不会更改。这可以用于单个多段线,也可以用于受约束三角剖分中的一组多段线约束。可以通过成本和停止功能来控制简化。

        折线简化是在保持整体形状尽可能多的同时减少折线组中使用的顶点数量的过程。

        拓扑保持折线简化意味着既不引入交点,也不改变多边形的嵌套级别:岛屿不会与简化的海岸线相交,并且岛屿会留在水中。

       它可以简化任何一组开放或封闭的多段线,并且可能相互交叉。该方法包括通过从一个折线中删除顶点q,迭代地用边(p,r)替换边(p,q)和(q,r)。在简化过程中,多段线集的拓扑结构得以保留,因为该算法保证在删除顶点时不会出现新的交叉点。

        根据用户提供的成本函数为顶点赋予的优先级删除顶点,该成本函数计算简化误差。成本函数是原始折线与当前折线(不包括顶点)之间偏差的度量。

        当用户提供的停止谓词返回true时,算法终止,例如,当达到所需的顶点数量或达到最大简化误差时。

        折线简化算法在《二维三角剖分》一章中的三角剖分类上运行,即Constrained_triangulation_plus_2。该数据结构允许删除折线约束的顶点,同时保留折线约束的已删除顶点的点。事实上,它是一个三角剖分,可以有效地对顶点p、q、r进行拓扑检查,因为这可以根据三角剖分中与q相邻的顶点集来确定。下图是进行折线简化的示意图

2、成本函数

        计算移除成本的具体方式称为成本函数。用户可以通过选择成本函数对象来选择不同的策略。

        有灿哥成本函数。由于成本函数是简化函数的模板参数,用户可以编写和使用自己的成本函数。提供的成本函数都是基于测量原始折线子序列与简化折线对应子序列之间的欧几里德距离,其中计算成本的顶点被删除。

        假设顶点p、q和r是折线约束的三个连续顶点。如果删除顶点q,则边(p,q)和(q,r)将被边(p,r)替换。

2.1、最大平方距离

        最大平方距离是p和r之间的原始折线上的每个点与线段(p,r)之间的平方欧几里得距离的最大值。 令s0,...,sn是原始折线上严格介于p和r之间的点。 删除顶点q的成本为:v1=max{squared_distance((p,r),si)|i=0,..,n}(简单地说移除和(p,r)线段最远的点)

2.2、缩放最大平方距离

        当保持相邻折线的分离很重要时,可以使用最大平方距离成本的变化。这里,最大值除以候选顶点q与其所有相邻顶点(除了p和r)之间的最小平方欧几里得距离。这些是相邻折线或同一折线的相邻区域的顶点。

        让t0,...,tm是顶点q相邻的顶点,不同于p和r,并让v2=min{squared_distance((p,r),ti)|i=0,..,n}。删除顶点q的成本为v1/v2,当t1..tm的集合为空时(如果点q在凸包上,则可能发生),它为正无穷大。请参阅图22.3。

        这种距离测量方法给相邻折线接近的顶点赋予较低的优先级。(移除和(p,r)线段距离的-1次的最小值)

2.3、混合最大平方距离

        在相邻多边形线很近的区域中,缩放最大值的效果很好,而在多边形线相距较远的区域中,绝对最大值的效果更好。 在某些应用中,例如地图轮廓,既有密集区域也有稀疏区域,因此一个好的策略是因情况而异采用缩放最大值或绝对最大值。

        混合距离测量使用参数R来指示使用哪种测量方法:如果v2,即与相邻顶点的最小距离低于R,则使用缩放最大值,否则使用绝对最大值。

        删除顶点q的成本为v1/v2,如果v2<R,否则为v1/R。

        正如Dyken等人所解释的那样,选择一个适合R的值是特定于问题的。 它可能取决于绘制时的笔大小或像素大小,或者多边形线上的点位于网格上时的网格大小。

3、范例

第一个范例:简单的折线简化

第二个翻译:简化带有约束三角剖分线段;简化存在重合边的约束三角剖分线段

(请注意,当多段线共享多段线顶点的子序列时,它们可以同时得到简化。)

第三个范例:简化带有约束三角剖分线段,但是可以保留简化的点同样可以移除简化的点

第四个范例:简化带有约束三角剖分线段,并打印结果

4、设计和实施历史

CGAL 6.0 - 2D Polyline Simplification: User Manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值