将折线转换为宽度为多边形的形状

时间:2013-11-05 03:31:42

标签: c# c++ algorithm image-processing

当我尝试解析并将Gerber RS274X文件转换为GDSII文件时,我遇到了一个问题。

  

如果沿某条路径(折线)描边实心圆,   你得到的是一个坚固的形状,可以随后转换   到一个封闭的多边形。我的问题是有没有图书馆或   可靠的算法来自动化这个过程,输入将是一个   表示折线的点串,输出将是   结果多边形。

下面是我上传的图片来解释我的问题。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过在每个输入点周围的圆圈中放置所需数量的均匀间隔点,然后在线段上找到每对圆形凸包来计算您寻找的形状。 这些多边形的并集将构成您想要的多边形。

a number of algorithms可以找到一组点的凸包,还有libraries which provide implementations

答案 1 :(得分:0)

您正在谈论的算法称为“Minkowski sum”(在您的情况下,折线和多边形,近似圆)。在你的情况下,第二个加数(圆圈)是凸的,这意味着可以使用所谓的多边形卷积相当有效地计算Minkowski和。

您没有指定您使用的语言。在C ++中,Minkowski sum是Boost.Polygon的一部分或CGAL的一部分。

要使用它们,您可能需要将折线转换为(退化的)多边形,方法是将其转换为两次:向前,然后向后。

@ melak47提出的凸壳联合将产生正确的结果,但效率却低得多。