【存档笔记】二阶与三阶贝塞尔曲线详解(含 De Casteljau 与公式推导)

二阶与三阶贝塞尔曲线详解(含 De Casteljau 与公式推导)

在 UI 动画、路径规划、字体渲染、Unity 动画曲线中,我们几乎每天都在使用一种"看似简单但极其强大"的工具------贝塞尔曲线(Bezier Curve)

但很多开发者对它的理解停留在:

"就是几个点拉一条弯曲的线"

实际上,贝塞尔曲线背后是一套非常优雅的数学与几何体系。

这篇文章将带你从直觉 → 构造 → 数学 → 工程理解,彻底掌握:

  • 二阶贝塞尔曲线
  • 三阶贝塞尔曲线(重点)
  • De Casteljau 算法(核心思想)
  • 通用数学公式(Bernstein 表达)

一、从线性插值开始(所有贝塞尔的根)

在进入贝塞尔曲线之前,我们先理解一个最基础的操作:

线性插值(Lerp)

给定两个点:

  • (P_0)
  • (P_1)

定义一个参数 (t∈ [0,1]),则:

含义是:

  • (t = 0) → 在 (P_0)
  • (t = 1) → 在 (P_1)
  • 中间值 → 在两点之间移动

这就是所有贝塞尔曲线的"原子操作"


二、二阶贝塞尔曲线:三点生成平滑曲线

2.1 三个点如何生成一条曲线?

二阶贝塞尔曲线由三个点定义:

  • (P_0):起点
  • (P_1):控制点
  • (P_2):终点

关键问题:

如何从三个点生成一条"弯曲"的曲线?


2.2 De Casteljau 算法(核心思想)

我们不用公式,直接用"构造过程"理解。

Step 1:两两插值

对两段做插值:

Step 2:再插一次

这个 (B(t)) 就是曲线上的点


2.3 直觉理解(非常重要)

可以这样理解:

  • 第一层:连接控制点形成"折线"
  • 第二层:在折线上滑动
  • 第三层:再连接一次

最终:

得到一条"平滑曲线"


2.4 二阶贝塞尔公式推导

将插值公式展开:

权重解释:

权重
P0 ((1-t)^2)
P1 (2(1-t)t)
P2 (t^2)

本质:加权平均


2.5 几何特性

  • 曲线一定经过:

    • (P_0)
    • (P_2)
  • 不一定经过:

    • (P_1)
  • 曲线始终在三点构成的三角形内部(凸包性质)


三、三阶贝塞尔曲线:工程中的主角

3.1 为什么三阶最常用?

三阶贝塞尔曲线使用四个点:

  • (P_0):起点
  • (P_1):起点切线控制
  • (P_2):终点切线控制
  • (P_3):终点

优势:

  • 可以控制起点方向
  • 可以控制终点方向
  • 表达能力强
  • 计算成本低

所以被广泛用于:

  • CSS cubic-bezier
  • Unity AnimationCurve
  • SVG Path

3.2 De Casteljau 三阶构造

构造过程:

第一层

第二层

第三层


3.3 控制点真正的作用(重点理解)

很多人误解:

控制点在曲线上

其实:

控制点决定的是"方向和速度"

更准确理解:

  • P1:控制起点的"出发方向"
  • P2:控制终点的"进入方向"

曲线的切线:

  • 在 P0:方向为 (P1 - P0)
  • 在 P3:方向为 (P3 - P2)

3.4 三阶公式

展开后得到:

和二阶一样,本质仍是加权平均


四、通用贝塞尔公式(统一理解)

4.1 一般形式

对于 n 阶贝塞尔曲线:


4.2 关键组成

二项式系数


Bernstein 基函数

作用:

  • 控制每个点的影响权重
  • 保证平滑变化

4.3 非常重要的性质

权重和为 1

保证是"加权平均"


非负性

所有权重 ≥ 0

曲线不会"飞出去"


凸包性质

曲线始终在控制点构成的区域内

非常适合做动画与路径


五、De Casteljau 算法(更深一层)

5.1 递归定义


5.2 为什么它很重要?

相比直接用公式:

优点:

  • 数值稳定(避免浮点误差)
  • 易实现(只用 lerp)
  • 可扩展(任意阶)

5.3 曲线分割(工程非常重要)

De Casteljau 还能做:

曲线拆分

在某个 (t):

  • 左半段 = 一条贝塞尔
  • 右半段 = 一条贝塞尔

用途:

  • 曲线细分(渲染)
  • 路径动画分段
  • 碰撞检测

六、小结

贝塞尔曲线本质上就是:

对控制点做"逐层线性插值"

或者从数学角度:

对控制点做"参数化加权平均"


相关推荐
ouliten24 分钟前
[Triton笔记3]融合 Softmax (Fused Softmax)
笔记·triton
岑梓铭1 小时前
考研408《操作系统》复习笔记,第二章《2.3.3 + 2.3.4 经典同步问题、管程》
笔记·考研·操作系统·408·os
前端小马1 小时前
PTE考试笔记
笔记·英语
m0_46644103詹湛3 小时前
FPGA时序优化与高速接口实战手册
笔记·学习·fpga开发·硬件架构·verilog
问心无愧05133 小时前
ctf show web 入门39
android·前端·笔记
Yeh2020583 小时前
Mybatis笔记一
java·笔记·mybatis
羊群智妍3 小时前
2026 AI搜索优化技术:GEO监测工具选型与应用
笔记
半导体守望者3 小时前
MKS elite 300 600 750W RF Plasma Generator 射频电源 OPERATIONMANUAL
经验分享·笔记·机器人·自动化·制造
05候补工程师3 小时前
【线性代数笔记】初等变换、正交化与特殊矩阵性质核心总结
经验分享·笔记·线性代数·考研·矩阵
Heartache boy4 小时前
野火STM32_HAL库版课程笔记-I2C介绍
笔记·stm32·单片机