题
我已经有了一个2D封闭的折线,这是合理流畅。顶点,一定不折不过不间隔的相同。有时候两个将会是非常接近,有时多达四个将会是非常接近在一起。
我喜欢光滑的线,但经常取平均的算法往往会缩小该区域:
for (int i = 0; i < (V.Length-1); i++)
{
PointF prev = V[i-1]; //I have code that wraps the index around.
PointF next = V[i+1];
PointF pt = V[i];
float ave_x = one_third * (prev.X + next.X + pt.X);
float ave_y = one_third * (prev.Y + next.Y + pt.Y);
smooth_polyline[i] = new PointF(ave_x, ave_y);
}
我折线包含有成千上万的点和角度之间的相邻的两个分段是一般小于1程度。
是否有更好的办法来平滑,这些曲线,这将空间的顶点更加公平,而不影响的地区太多了?
解决方案
你可以看看在"简化曲线"的文献,例如道格拉斯-普克的算法或本文 http://www.cs.ait.ac.th/~guha/文件/simpliPoly.pdf.
这可能不会工作如果你需要的间隔均匀的顶点,即使相邻的线段,他们定义几乎一直线上。
其他提示
我认为你是在寻找 蔡金的算法.有一个变这种思想,使平滑的曲线直接传递通过(而不是"内部")的控制点,但我有麻烦谷歌上搜索它的时刻。
你也可以用花插-只是搜索在维基百科
有人已经移植到2平滑的算法,与CPOL(免费)的许可证,在这里看到:
不隶属于 StackOverflow