矢量曲线压缩

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矢量曲线压缩

摘要本文介绍了矢量数据的压缩方法的几种算法,通过对不同的数据压缩算的比较,总结出一种使曲线点数据压缩后,数据量变小,压缩合理的处理算法。同时运用AutoCAD2004二次开发编程技术,以Visual C++.NET为编程工具将以实现。

关键词矢量数据压缩阀值曲线

矢量数据是我们日常生产和作业中,使用非常普遍的一种数据类型。在使用中,有时需要对矢量数据进行压缩,多余的数据不仅浪费了较多的存贮空间,也加大了数据转换的处理量。矢量数据压缩的目的是删除冗余数据,减少数据的存贮量,节省存贮空间,加快后继处理的速度。

压缩算法:

矢量数据的压缩方法常用的有间隔取点法、垂距法、偏角法、道格拉斯—普克法(Douglas-Poiker)等。在保证压缩曲线形状不变的情况下,最大限度的压缩曲线点数。曲线压缩的关健是定义压缩的阀值,曲线压缩的阀值不同决定了不同算法的多样性。本文通过在以有矢量压缩算法中的比较,以十分突出的压缩算法的思想,用Visual C++.NET编写的程序,实现对曲线的压缩。

间隔取点法

就是在保留首末点的前题下,每隔一个点取一点,或者压缩那些离已选点比规定距离更近的点,这种方法可以大量压缩曲线点数。但不能恰当地保留曲线方向上曲率的特征点。在编写程序方面可以很好的实现。

线段法

线段过滤法是指当某一段的长度小于某一值时,舍去该段的两段点,以中点代替该段,如右图所示。在图中,曲于线段BC的小度小于线段的过滤值,因此舍去该段的两段点,以中点E代替该段,如虚线所示。线段的过滤值是由作图时数据精度面定,因没有明确规定,编程时要定输入参数。

垂距法

是从第一点开始依次筛选,排除冗余点。即以和线点为起点,计算第二点到第一点和第三点所构成的直线的距离,如果该距离大于某一阀值,则保留第二点,

并以该点作为新的起点,计算第三点到第二点和第四点所构成的直线的距离,否则,舍去第二点,仍以第一点为起点,计算原曲线曲上第三点到第一点和第四点所构成直线的距离。依此类推,直至曲线上最后一点。

偏角法

偏角法类似于垂距法,它是从角度考滤计算,排除冗长余点。从第一点开始筛选,计算第二点到第一点和第三点所构成夹角的角度,如果该角度大于规定的限差,则保留该点,并以第二点开始计算,计算第三点到第二点和第四点的所构成夹角的角度,如小于规定的限差,则舍去该点。依此循环到曲线尾。

道格拉斯-普克(Douglas-Poiker)

道格拉斯-普克抽稀算法,是用来对大量冗余的图形数据点进行压缩以提取必要的数据点。该算法实现抽稀的过程是:先将一条曲线首尾点虚连一条直线,求其余各点到该直线的距离,取其最大者与规定的临界值相比较,若小于临界值,则将直线两端间各点全部舍去,否则将离该直线距离最大的点保留,并将原线条分成两部分,对每部分线条再实施该抽稀过程,直到结束。抽稀结果点数随选取限差临界值的增大而减少,应用时应根据精度来选取限差临界值,以获得最好的效果。

通过上述几种压缩算法分析比较,在一般情况下, 道格拉斯-普克法压缩效果占优,其次是垂距法、间隔法和偏角法,道格拉斯-普克法有一个十分突出的优点,即它是一个整体算法,在一般情况下可保留较大弯曲形态上的特征点。经道格拉斯-普克法压缩后,由于该算法可准确删除小弯曲上的定点,故能从体上有效地保持线要素的形态特征。正是因为道格拉斯-普克法具有这样突出的优点,所以已经在线要素地自动制图中得到了较广泛的应用。但道格拉斯-普克法较垂距法复杂,计算工作量较大,且通常编程实现时需要采用递归方,有一定的难度。

算法实现

本文针对道格拉斯-普克(Douglas-Poiker)算法,采用面向对象的编程技术以Visual C++为编程工具,对矢量数据进行处,有效地实现了曲线的压缩,程序的流程如下图:

该算法的主要功能函数是PerpDistance(...),该函数的功能是根据输入的限差,确定线上的点是保留还是去除。PerpDistance(...)函数的实现思想是,将曲线上的各点与曲线的端点连接,组成一个三角形,如右图。根据数据精度要求,给定控制数据压缩的限差阀值。计算压缩过程如下:

1.先确定曲线AB对应弦的直线方程。根据两点直线方程,由起点A到终点B建立直线方程为:

2.求出曲线AB上各点Pi到弦线AB的距离di。

3.求距离di的最大值。

4.比较与限差阀值,提取曲线中特征点。

5.形成新的坐标点数据。

将所有提取出的中间特征点从起点A开始,顺序排列至终点B,并写入新的数据,即得到压缩后的曲线数据。曲线提取特征点过程如下:

①找到曲线ABh在对应点位为1号点;经判断可以用弦线代替曲线,1号点是继M点之后提取出的第一个特征点;

②连接弦线1B;经判断,不可以用弦线1B代替曲线1B;找到曲线1B上这的对应点位为2号点;连接1、2号点之弦线12;经判断,还是不可以用弦线12代替曲线12;找到曲线12上之的对应点位为3号点;再连接1、3号点之弦线13;经判断,可以用弦线13代替曲线13;3号点是继1号点之后提取出的第二个特征点;

③连接弦线3B;经判断,不可以用弦线3B代替曲线3B;找到曲线3B上之的对应点位仍为2 号点;然后,连接3、2号点之弦线32;经判断,可以用弦线32代替曲线32;2号点是继1号点、3号点之后提取出的第三个特征点;

④连接2、B号点之弦线2B;经判断,可以用弦线2B代替曲线索2B;中间特征点提取结束。

结束语

为说明起见,以一组坐标为例表1所示,进行精度分析,对于道格拉斯-普克(Douglas-Poiker)算法,其阀值取相应地物允许误差,本例中取0.2mm,对1:500比列尺的图,其实地为0.05m,分析计算过程如表3所示,计算结果如表2所示。

注:文章中涉及的公式和图表请用PDF格式打开

相关文档
最新文档