我正在尝试创建一个“平行”的贝塞尔曲线。我已经接近成功,但还差一点。我试图保持两个曲线之间的1像素偏移(红色和蓝色)。
我的主要目标是使用边缘偏移算法来扩展/收缩SVG路径。
解决方案
对于任何其他正在寻找解决方案的人,我已经创建了一个AS3版本。
http://seant23.wordpress.com/2010/11/12/offset-bezier-curves/
我正在尝试创建一个“平行”的贝塞尔曲线。我已经接近成功,但还差一点。我试图保持两个曲线之间的1像素偏移(红色和蓝色)。
我的主要目标是使用边缘偏移算法来扩展/收缩SVG路径。
解决方案
对于任何其他正在寻找解决方案的人,我已经创建了一个AS3版本。
http://seant23.wordpress.com/2010/11/12/offset-bezier-curves/
我希望您会发现我的数学论文有用
通过选择性细分进行二次贝塞尔曲线偏移 https://microbians.com/mathcode
来自维基百科:(http://en.wikipedia.org/wiki/B%C3%A9zier_curve)
从给定的Bézier曲线偏移固定距离处的曲线,通常称为偏移曲线(类似于铁路轨道之间的偏移),不能被一个Bézier曲线完全形成(除了一些微不足道的情况)。然而,有启发式方法通常可以给出实际目的下足够的近似值。
您还可以查看此处指示的论文: Outline of cubic bezier curve stroke
一般来说,对于三次/贝塞尔曲线,偏移曲线是一个10次多项式!来源:Kilgard, p. 28
如果你只想栅格化这样的偏移曲线,而不是计算它们的解析形式,你可以例如查看ghostscript的源代码。你也可以查看这个专利申请,看看NV_path_rendering是如何做到的。
如果您想转换或近似偏移曲线,那么涵盖METAFONT到PostScript字体的TUG论文MetaFog是一个很好的参考。METAFONT系统先于PostScript出现,它允许用(更复杂的数学)描边操作来描述字体,但由于速度原因,PostScript Type 1字体只允许使用填充而不是一般的PostScript绘图。
另一个算法以(仅两个)贝塞尔曲线(每侧一个)来逼近偏移量,并提供了在PostScript中的代码,在Gernot Hoffmann的这篇论文第7节中介绍。(感谢OpenGL论坛上的某人发现了这篇文章。)
实际上有很多这样的算法。我找到了一篇1997年的调查报告,介绍了各种用于近似偏移曲线的算法。它们假设源曲线是Bezier或NURBS。
0,0
到2,2
再到0,2
画一条曲线,然后将曲线复制到图像中并以4,4
为中心重新绘制(而不是2,2
),那么这不会产生1像素的偏移吗? - warren