什么是贝塞尔曲线?
所以,贝塞尔曲线是一种数学定义的曲线,广泛应用于 Adobe Illustrator、Inkscape 等二维图形应用程序中。在我们的示例中,该曲线由四个点定义:初始位置和终止位置,即分别为 P0 和 P3(被称为“锚点”),以及两个独立的中间点,即 P1 和 P2(被称为“控制柄”)。贝塞尔曲线常用于计算机图形学、动画、建模等领域。
我们如何在数学上表示贝塞尔曲线?
贝塞尔曲线可以在其他点的控制下生成。我们使用控制点来近似切线以生成曲线。贝塞尔曲线可以在数学上表示为——
P(u) = \sum{i=0}^{n} P{i}{B_{i}^{n}}(u)
其中 p{i} 是点集,{B{i}^{n}}(u) 代表伯恩斯坦多项式,即混合函数,其定义如下——
{B_{i}^{n}}(u) = \binom{n}{i} (1 – u)^{n-i}u^{i}
其中 n 是多项式的阶数,i 是索引,u/t 是变量,范围从 0 到 1。
让我们从数学上定义我们的三次贝塞尔曲线。
所以,贝塞尔曲线由一组控制点 P{0} 到 P{n} 定义,其中 n 被称为其阶数(n = 1 表示线性,n = 2 表示二次,以此类推)。第一个和最后一个控制点始终是曲线的端点;然而,中间的控制点(如果有)通常不在曲线上。
对于三次贝塞尔曲线,多项式的阶数 是 3,索引 的变化范围为 i = 0 到 i = n 即 3,u 的变化范围为 0\leq u \leq1。
三次贝塞尔曲线函数定义如下:
P(u) = P{0}{B{0}^{3}}(u) + P{1}{B{1}^{3}}(u) + P{2}{B{2}^{3}}(u) + P{3}{B{3}^{3}}(u)
三次贝塞尔曲线的混合函数定义如下:
{B_{0}^{3}}(u) = \binom{3}{0} (1 – u)^{3-0}u^{0} \equiv 1(1 – u)^{3}u^{0}
{B_{1}^{3}}(u) = \binom{3}{1} (1 – u)^{3-1}u^{1} \equiv 3(1 – u)^{2}u^{1}
{B_{2}^{3}}(u) = \binom{3}{2} (1 – u)^{3-2}u^{2} \equiv 3(1 – u)^{1}u^{2}
{B_{3}^{3}}(u) = \binom{3}{3} (1 – u)^{3-3}u^{3} \equiv 1(1 – u)^{0}u^{3}
所以,
P(u) = (1 – u)^{3}P{0} + 3u^{1}(1 – u)^{2}P{1} + 3(1 – u)^{1}u^{2}P{2} + u^{3}P{3}
并且
P(u) = \{x(u) , y(u) \}
现在,
x(u) = (1 – u)^{3}x{0} + 3u^{1}(1 – u)^{2}x{1} + 3(1 – u)^{1}u^{2}x{2} + u^{3}x{3}
y(u) = (1 – u)^{3}y{0} + 3u^{1}(1 – u)^{2}y{1} + 3(1 – u)^{1}u^{2}y{2} + u^{3}y{3}
因此,我们将通过把 u 的值增加 0.0001 来逐像素计算曲线的 x 和 y 坐标。
!Cubic-Bezier-Curve-Diagram三次贝塞尔曲线的构建
贝塞尔曲线的性质
- 它们总是经过第一个和最后一个控制点。
- 它们包含在其定义控制点的凸包内。
- 定义曲线段的多项式的次数比定义多边形点的数量少一。因此,对于 4 个控制点,多项式的次数为 3,即三次多项式。
- 贝塞尔曲线通常遵循定义多边形的形状。
- 端点处的切线向量方向与由首尾段确定的向量方向相同。
- 贝塞尔曲线表现出全局控制,这意味着移动一个控制点会改变整条曲线的形状。
注意:以下实现使用 SDL 库在屏幕上绘制像素。如果您使用的是像 Ubuntu 这样的 Debian 系统,只需运行以下命令即可安装 SDL 库。
特性
- 贝塞尔曲线主要遵循控制多边形的形状,该多边形由连接控制点的线段组成。
- 它们总是经过第一个和最后一个控制点。
- 它们被包含在其定义控制点的凸包内。
- 定义曲线段的多项式次数比定义多边形点的数量少一。因此,对于 4 个控制点,多项式的次数为 3,即三次多项式。
- 端点处的切线向量方向与由首尾段确定的向量方向相同。
- 贝塞尔曲线的凸包性质确保多项式可以平滑地跟随控制点。
- 直线与贝塞尔曲线的交点次数,绝不会超过它与控制多边形的交点次数。
- 它们在仿射变换下具有不变性。
- 贝塞尔曲线表现出全局控制,这意味着移动一个控制点会改变整条曲线的形状。
- 给定的贝塞尔曲线可以在 t=t0 处进一步细分为两个贝塞尔曲线段,这两个段在对应于参数值 t=t0 的点处连接在一起。
例如:我们已知四个控制点 B0[1,0], B1[2,2], B2[6,3], B3[8,2],那么请确定构成l