将由轮廓样条构建的形状转换为简单的多边形

Posted

技术标签:

【中文标题】将由轮廓样条构建的形状转换为简单的多边形【英文标题】:Transform shape built of contour splines to simple polygons 【发布时间】:2010-05-06 14:13:42 【问题描述】:

我已经从 truetype 文件中转储了字形,以便我可以使用它们。它们具有由二次贝塞尔曲线和线条组成的形状轮廓。我想为这些形状输出三角形,以便为用户可视化它们。

传统上我可能会使用 libfreetype 或扫描光栅化这种轮廓。但我想从字体中生成挤压的 3D 网格,并用它们进行其他变形。

那么,如何对由二次贝塞尔曲线和直线组成的形状进行多边形化?有许多轮廓一起形成了形状。一些轮廓是加法的,而另一些是减法的。轮廓永远不会打开。它们形成一个循环。

(实际上,我只从 ttf 字形获得轮廓顶点,这些顶点定义它们是否是曲线的一部分。即使很容易将它们分解为贝塞尔曲线和线条,但知道数据以这种方式表示可能有助于将轮廓多边形化为三角形)

【问题讨论】:

您想将贝塞尔曲线映射到三角形吗?这很难想象。 都是近似值。很可能我会在应用算法之前将贝塞尔线段转换为线条,尽管我在这里描述它是希望有人有比我现在工作的算法更好的算法。 【参考方案1】:

这很简单。您需要对曲线执行布尔运算,然后继续连接成对的曲线,直到只剩下一条曲线。

首先,您需要评估曲线并将其转换为折线。

然后你需要确保两个轮廓相交的每个地方都有一个顶点(这部分实际上可以尝试,由于数字错误;你可以使用the Bentley-Ottmann algorithm)。

最后,您需要做的就是遍历曲线并以正确的顺序连接它们以执行布尔运算,生成weakly simple polygons。

这样的多边形可以使用例如三角剖分。 ear clipping algorithm(速度很慢,但实现起来相当简单)。

希望这会有所帮助...

【讨论】:

以上是关于将由轮廓样条构建的形状转换为简单的多边形的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV计算机图像处理 —— 凸性缺陷 + 点多边形测试 + 形状匹配 + 轮廓分层与cv.findContours()

opencv 多边形近似物体形状 cv.approxPolyDP函数的应用

OpenCV中几何形状识别与测量

OpenCV中几何形状识别与测量

OpenCV中几何形状识别与测量

Three.js将多边形线条(Line)转换成模型(Mesh)