29

我正在尝试创建“平行”贝塞尔曲线。在我的尝试中,我已经接近但没有雪茄。我试图在 2 条曲线(红色,蓝色)之间保持 1px 的实心偏移。

当前尝试

我的主要目标是使用边缘偏移算法来扩展/缩小 svg 路径。


解决方案

对于其他正在寻找解决方案的人,我创建了一个 AS3 版本。

http://seant23.wordpress.com/2010/11/12/offset-bezier-curves/

4

4 回答 4

14

我希望你发现我的数学论文有用在此处输入图像描述

具有选择性细分的二次贝塞尔曲线偏移 https://microbians.com/mathcode

于 2014-04-02T22:36:05.493 回答
11

来自维基百科:(http://en.wikipedia.org/wiki/B%C3%A9zier_curve

与给定贝塞尔曲线有固定偏移的曲线,通常称为偏移曲线(与原始曲线“平行”,就像铁轨中的轨道之间的偏移),不能完全由贝塞尔曲线形成(除了在某些小事例)。但是,有一些启发式方法通常可以为实际目的提供足够的近似值。

您可能还会看到此处指出的论文: 三次贝塞尔曲线描边轮廓

于 2010-11-10T20:48:47.350 回答
8

您所要求的在数学中称为平行或偏移曲线。关于贝塞尔曲线的维基百科文章(上面由其他人引用)未能链接到“偏移曲线”的正确文章,但我已经在几秒钟前修复了这个问题。在矢量图的世界中,同样的概念被称为抚摸路径。

一般来说,对于三次/贝塞尔曲线,偏移曲线是 10 阶多项式!资料来源:基尔加德,p。28

如果您只想对此类偏移曲线进行光栅化,而不是计算它们的解析形式,则可以例如查看 ghostscript 的来源。您还可以查看此专利申请,了解 NV_path_rendering 是如何做到的。

如果您想隐藏/近似偏移曲线,那么MetaFog上的 TUG 论文将 METAFONT 覆盖到 PostScript 字体是一个很好的阅读材料。早于 PostScript 的 METAFONT 系统允许通过(在数学上更复杂的)笔划操作来描述字体,但出于速度的原因,PostScript Type 1 字体仅允许使用填充(与一般的 PostScript 绘图不同)。

Gernot Hoffmann 在本文的第 7 节中给出了另一种使用 PostScript 中的代码将偏移量近似为(只有两个)贝塞尔曲线(每边一个)的算法。(向 OpenGL 论坛上的某个人致敬以找到它。)

实际上有很多这样的算法。我发现了1997 年对用于逼近偏移曲线的各种算法的调查。他们假设祖曲线是贝塞尔曲线或 NURBS。

于 2014-08-14T16:30:23.503 回答
7

通常不可能将三次贝塞尔曲线的偏移量表示为三次贝塞尔曲线(具体而言,当您的尖点或曲率半径接近偏移距离时,这是有问题的)。但是,您可以将偏移量近似为任何精度级别。

试试这个:

  • 抵消有问题的贝塞尔曲线(您已经拥有的似乎相当不错)
  • 测量每条原始曲线和相应的偏移曲线之间的差异。我会尝试 10 个样本,看看它是否运作良好。
  • 对于超出公差的任何偏移,细分(使用贝塞尔的 deCastlejau 算法)并迭代。

我还没有实现偏移(因为我使用的内核已经有一个),但这似乎是值得尝试的。

于 2010-11-12T05:06:05.363 回答