2011-11-25 119 views
3

我正在尝试平滑多边形的边缘。这是一个允许用户放大和缩小的地图应用程序。在高变焦时,我不需要所有的细节,所以我平滑多边形以减少点数。我只是遍历所有点,并删除距离最后一个X距离内的任何点。其中X在所得屏幕上适当地为1个像素。边缘平滑,同时保留角落等功能

这似乎工作很好,除少数情况下。例如,如果用户放大,我放大矢量,同时异步加载细节。在加载额外的细节,用户会看到像什么是下图中:

Enlarged vector image showing the problem

方形矢量多边形有他们的边角稍有不慎四舍五入。

我正在寻找的是一种平滑的或调整大小的算法,它将减少绘制多边形的点数,同时保留一些特征,如角点。

+0

为什么这些多边形中有超过4个宽间隔点? – erickson

+0

这些多边形是美国的县,并不都是简单的正方形。我只是选择了一个可以看到问题的区域。然而,定义县(由人口普查局提供)的数据具有多条直线。 希望平滑算法可以去除这些无用的点。 – bramp

回答

3

也许你可以使用类似Douglas-Peucker算法。

它可以用于通过删除不会改变整体形状的点“太多”(容差值控制“太多”的含义)来简化多义线。

我认为这会消除多线中“直线”部分的点,同时保留尖锐特征(如角)完好无损。

希望这会有所帮助。

+0

谢谢,看起来不错的开始。 – bramp

1

您可以检查该点任一侧的两条线所形成的角度,并且只有在该角度低于指定阈值时才能移除该点。

+0

我曾考虑过这个问题,但我希望得到一个更正式的算法,而不是滚动自己的算法。 – bramp

+0

@bramp我明白了。我应该删除这个吗? –

+0

Mr.Wizard,我不知道StackOverflow礼节是什么,但我不介意它是否保留或被删除。也许有人会根据你的建议采用正式的算法来启发我们。 – bramp