我已经从 truetype 文件中转储了字形,所以我可以使用它们。它们具有由二次贝塞尔曲线和直线组成的形状轮廓。我想输出此类形状的三角形,以便为用户可视化它们。
传统上我可能会使用 libfreetype 或扫描栅格化这种轮廓。但我想从字体中生成挤压的 3D 网格,并用它们进行其他扭曲。
那么,如何将由二次贝塞尔曲线和直线组成的形状多边形化?有许多轮廓一起形成形状。有些轮廓是加法的,有些是减法的。轮廓永远不会打开。它们形成一个循环。
(实际上,我只从 ttf 字形中获取轮廓顶点,这些顶点定义了它们是否是曲线的一部分。尽管很容易将它们分解为贝塞尔曲线和直线,但知道数据以这种方式表示可能有助于将轮廓多边形化为三角形)
最佳答案
这很简单。您需要对曲线执行 bool 运算,然后继续连接成对的曲线,直到只剩下一条曲线。
首先,您需要评估曲线并将它们转换为折线。
然后你需要确保在两个轮廓相交的每个地方都有一个顶点(这部分实际上可以尝试,由于数字错误;你可以使用 the Bentley-Ottmann algorithm )。
最后,您需要做的就是遍历曲线并以正确的顺序连接它们以执行 bool 运算,产生weakly simple polygons。 .
这样的多边形可以使用例如三角剖分ear clipping algorithm (这很慢,但实现起来相当简单)。
希望这有助于...
关于c - 将由轮廓样条构建的形状转换为简单的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781711/