三次贝塞尔曲线描边的概述

时间:2009-01-03 01:48:41

标签: math bezier

通过三次贝塞尔曲线的笔划,我的意思是渲染具有特定线宽'w'的曲线'A'。

如何推导出描述贝塞尔“A”笔画轮廓的其他三次贝塞尔曲线?

3 个答案:

答案 0 :(得分:17)

哦~~。您想获得贝塞尔曲线的偏移曲线。

坏消息。这很难,因为这些曲线不能简单地导出数值。它们包含各种交叉点,循环和其他令人讨厌的东西。

虽然有一些近似值。到目前为止,我读过的最佳方法来自Thomas F. Hain的论文(Fast, Precise Flattening of Cubic Bézier Path and Offset Curves)。

他确实变平,因此他的论文主要是将偏移曲线分解为线段和圆弧段,但您可以稍后将它们合并回贝塞尔曲线。

为了更好地理解你也可以阅读他的其他bezier相关论文。

答案 1 :(得分:4)

Qt的QPainterPathStroker(它的开源和相当可读的代码)使用上述论文中描述的算法来做你想要的。

答案 2 :(得分:0)

准确的做法正如其他人所解释的那样非常困难。偏移曲线不是立方贝塞尔曲线,非常难以处理。然后比偏移更深的凹陷会导致交叉问题。

好消息是,通常你想计算渲染的笔画偏移,所以只需要像素精度。此外,如果您观察多边形填充的缠绕规则,则各个交叉点仍会创建填充多边形。因此,首先展平曲线,然后以线性方式偏移,它将成为直线多边形问题。

这里的一些代码可以用作参考实现: https://github.com/memononen/nanosvg