边缘平滑,同时保持角落等功能

时间:2011-11-25 15:30:10

标签: algorithm language-agnostic vector smoothing

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

这似乎很有效,除了少数情况。例如,如果用户放大,我会放大矢量,同时异步加载细节。在加载额外细节时,用户会看到类似下图中的内容:

Enlarged vector image showing the problem

方形矢量多边形的角有些无意中圆了。

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

2 个答案:

答案 0 :(得分:3)

也许您可以使用类似Douglas-Peucker算法的内容。

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

我希望这会消除多边形“直线”部分的点,同时保持尖锐的特征(如角落)不变。

希望这有帮助。

答案 1 :(得分:1)

您可以检查点两侧的两条线形成的角度,如果角度低于指定的阈值,则只删除该点。