如何确定贝塞尔曲线锚点的最佳位置?

平面设计 贝塞尔曲线
2022-01-31 18:16:19

要使用(三次)贝塞尔曲线绘制这个苹果,可以改变锚点的位置和数量:

在此处输入图像描述
(苹果图片:来源

这两条曲线以某种程度的准确度覆盖了苹果,它们并不完美,我相信有更好的组合。

总体:

  • 应如何确定点位置以保持其数量最佳?
  • 在这个苹果的情况下,有没有明显更好的解决方案?

欢迎提供参考资料的链接。


曲线是使用 Inkscape 绘制的。

2个回答

many* 使用的典型策略是将点放置在曲线极值处,正如@RadLexus在评论中提到的那样。在这种情况下,极值定义为曲线与纸张方向呈 0 度或 90 度的位置。

在此处输入图像描述

图 1:一种好的策略是将点放在极值上

点之间的角度超过 90 度使您无法制作椭圆(或圆形)形状,因为对此类形状的拟合在 90 度之后开始显着增长。因此,通过使用这种策略,问题永远不会出现。没有什么说你需要做 0 度和 90 度,你可以做 40 度和 130 度线,但 0 度和 90 度线很容易找到,通常有一个修饰符可以保持这种约束。因此,如果您将线条保持在小于 90 度的距离内,您应该会遇到更少的问题。

在 90 度的极值之外,您可能希望将点数保持在尽可能低的水平,因为更多的点并不等同于更平滑的线。这就是为什么你要避免做 45 度增量,除非情况需要。当然,您可以获得更多控制权,但不一定知道曲线的放置位置,因此您会得到一条摇摆不定的线。另一个好习惯是在曲率方向改变的点处剪出s形曲线。

由于您使用的是inkscape,您可能想尝试使用螺旋曲线而不是贝塞尔曲线。

* 虽然我不使用它。

您可以按照以下步骤操作:

1) 沿曲线收集点位置

2)写一个贝塞尔曲线方程的线性化符号,这将导致你进入一个超定系统,即方程多于变量

3)使用普通最小二乘法计算控制点

4)(可选)将端点夹在曲线上

我试过了,效果很好。这是显示概念的图片,但脚本是用 Python 编写的。

在此处输入图像描述

我有 4 条曲线,并且想要拟合贝塞尔补丁(2D 或 3D)而不是 1D,但它们都是相同的方法。我为每个方向使用 8 x 3 个控制点,并通过最小二乘法获得控制点的位置。