← 返回Book 2目录
第33章

贝塞尔曲线

Bézier Curves

从线性插值到高阶曲线的优雅数学

33.1 贝塞尔曲线

贝塞尔曲线(Bézier curve)是计算机图形学中最重要的数学曲线之一。 它由法国工程师Pierre Bézier在1960年代为雷诺汽车设计车身时发明, 现已广泛应用于字体设计、矢量图形、动画缓动等领域。

核心概念

控制点:定义曲线形状的关键点
阶数:等于控制点数量减1
局部控制性:调整单个控制点只影响局部形状
平滑曲线:天然产生光滑的曲线

33.2 一阶

一阶贝塞尔曲线是最简单的形式,本质上就是两点之间的线性插值(lerp)。 给定两个端点P₀和P₁,以及参数t ∈ [0, 1],曲线上的点B(t)由线性插值公式确定。

lerp函数(线性插值)

B(t) = P₀·(1-t) + P₁·t = P₀ + t·(P₁ - P₀)
t=0:B(0) = P₀(起点)
t=1:B(1) = P₁(终点)
t=0.5:中点
结果:一条直线

33.3 二阶

二阶贝塞尔曲线由3个控制点定义:两个端点P₀、P₂和一个中间控制点P₁。 构造过程是"两次lerp"——先在两对相邻点之间分别插值,再对结果插值。 这种递归结构是De Casteljau算法的核心。

二阶贝塞尔曲线构造

第一步:Q₀(t) = lerp(P₀, P₁, t),Q₁(t) = lerp(P₁, P₂, t)
第二步:B(t) = lerp(Q₀, Q₁, t)
展开:B(t) = P₀·(1-t)² + 2·P₁·t·(1-t) + P₂·t²

🎯 控制点作用

P₀、P₂是端点,曲线必定通过
P₁是控制点,曲线被"吸引"但不通过

📐 几何性质

曲线在端点处的切线方向指向相邻控制点
所有二阶贝塞尔曲线都是抛物线段

33.4 三阶与高阶

三阶贝塞尔曲线由4个控制点定义,是实践中最常用的形式。 SVG路径、字体轮廓(TrueType、OpenType)、CSS动画缓动函数都基于三阶贝塞尔曲线。 它在平滑性和可控性之间达到最佳平衡。

通用Bernstein多项式公式

B(t) = Σᵢ C(n,i)·tⁱ·(1-t)ⁿ⁻ⁱ·Pᵢ

其中 C(n,i) = n! / (i!·(n-i)!) 是二项式系数,n是阶数,Pᵢ是控制点。

1阶

2点,直线

2阶

3点,抛物线段

3阶 ⭐

4点,最常用

4阶+

复杂形状

📐 贝塞尔曲线探索器

拖动控制点,观察贝塞尔曲线如何实时变化。调整阶数体验不同复杂度的曲线。

贝塞尔曲线公式

B(t) = Σ C(n,i)·t^i·(1-t)^(n-i)·P_i

n: 阶数 = 2

t: 参数 ∈ [0, 1]

C(n,i): 组合数(二项式系数)

P_i: 控制点坐标

💡 拖动红色控制点改变曲线形状

P0P1P2

🎯 端点插值

曲线必定通过首尾控制点P₀和P_n,中间控制点影响形状。

📦 凸包性质

曲线完全位于控制点构成的凸包内,不会超出范围。

🔄 平滑性

贝塞尔曲线天然平滑,广泛应用于字体设计和图形学。

⚙️ 阶数影响

阶数越高,曲线越灵活,但计算成本增加。3阶最常用。

🎨 贝塞尔曲线画廊

随机生成的控制点产生多样化的曲线形态,固定端点从左下到右上

📊 二阶曲线

3个控制点,1个中间点控制弯曲方向
所有曲线都是抛物线段

📈 三阶曲线

4个控制点,可产生S形曲线
SVG、字体设计最常用

🔄 四阶曲线

5个控制点,更复杂的弯曲行为
可能出现自交叉

💡 观察规律:相同阶数但不同控制点位置产生差异巨大的曲线。 中间控制点的位置决定曲线的"拉伸"方向和程度。 曲线颜色从深色(t=0)渐变到浅色(t=1),揭示参数t的行进方向。

33.5 三维空间与RGB色彩

贝塞尔曲线可以扩展到三维空间。当我们将3D坐标(x, y, z)同时解释为RGB颜色值时, 贝塞尔曲线不仅定义了空间路径,更创造了平滑的颜色渐变。

🎨 颜色即坐标

起点 [0,0,0] = 黑色
终点 [1,1,1] = 白色
中间控制点 = 随机RGB值
曲线颜色 = 当前坐标

📊 阶数与复杂度

1阶:黑→白直接渐变
2阶:经过1个中间色
3阶+:复杂的颜色过渡路径

💡 示例:黑色 → 紫色 → 白色的贝塞尔颜色渐变路径

33.6 鸢尾花曲线

鸢尾花曲线是贝塞尔曲线的艺术应用典范。通过叠加数百条三阶贝塞尔曲线, 每条曲线的控制点由连续变化的角度参数化(使用椭圆坐标), 配合从深蓝到浅蓝的渐变色谱和透明度,创造出类似鸢尾花花瓣的优雅图案。

📐 控制点公式

X = [0, A₁·cos(θ₁), A₂·cos(θ₂), cos(θ₃)]
Y = [0, B₁·sin(θ₁), B₂·sin(θ₂), sin(θ₃)]

A、B是椭圆参数,θ连续变化产生平滑过渡

🌸 鸢尾花曲线

叠加数百条三阶贝塞尔曲线,通过连续变化的角度参数创造优雅的花瓣图案

50250500

🔧 参数说明

  • • 曲线阶数:3阶(4个控制点)
  • • 起点:固定在圆心(0,0)
  • • 控制点:椭圆参数化 (A·cos(θ), B·sin(θ))
  • • 角度:3组连续变化的θ₁, θ₂, θ₃
  • • 颜色:深蓝到浅蓝渐变
  • • 透明度:0.3,增强层次感

🎨 算法艺术

简单数学规则 + 连续参数变化 = 复杂美丽图案
体现了"简单规则产生复杂行为"的哲学

📐 椭圆参数化

控制点位置由椭圆方程确定
A、B参数控制椭圆的扁平程度

🌀 连续性

角度θ连续变化产生平滑过渡
相邻曲线之间形成自然的层次

💡 创作灵感:基于Oliver Brotherhood的开源设计。通过调整随机种子可以生成无限多种独特的鸢尾花图案。 每个图案都是由数学公式精确计算的,却展现出有机的自然美感——这正是算法艺术的魅力所在。

🎯 核心洞察与应用

数学之美

  • 递归构造:从lerp到任意阶曲线
  • 端点插值:曲线必定通过首尾点
  • 凸包性质:曲线不会超出控制点范围
  • 变差缩减:曲线比控制多边形更平滑

实际应用

  • 字体设计:TrueType/OpenType轮廓
  • 矢量图形:SVG路径、Illustrator
  • 动画缓动:CSS cubic-bezier()
  • 算法艺术:鸢尾花曲线等生成艺术

设计哲学: 贝塞尔曲线的核心思想是"递归线性插值"——通过反复应用最简单的lerp操作, 构造出任意复杂度的曲线。这种从简单到复杂的递归构造方式, 不仅数学优雅,更便于计算机实现。今天你看到的每个字母、每个图标, 背后都有贝塞尔曲线的身影。