2.3 贝塞尔曲线(Bézier Curve)
category
type
status
slug
date
summary
tags
password
icon
做人呢,最重要的是开心。—TVB
🏰代码及环境配置:请参考 环境配置和代码运行!
贝塞尔曲线(Bézier Curve),也被称为贝塞尔多项式(Bézier Polynomial),是一种由一系列控制点(Control Point)所定义的平滑曲线。
2.3.1 感性认识
2.3.1.1 1阶贝塞尔曲线
我们从一维开始,假设有两个控制点, 我们用参数方程表达线段. 显然.
当t从0到1逐渐增大时, 就有了1阶贝塞尔曲线
2.3.1.2 2阶贝塞尔曲线
增加一个控制点, 容易理解的是, 是线段上的点,是线段上的点
我们将的连线(绿色线)也用参数方程表达, 并且取点作为点形成贝塞尔曲线.
我们详细的解释一下, 这里隐含了一个比例的约束:
也就是说参数t实际代表: 当前点在线段上的百分比位置. 比如t=0.5时, 处在线段的中点; 处在线段的中点; 同样, 处于线段的中点;
每一个构成了最终的贝塞尔曲线
2.3.1.3 3阶贝塞尔曲线
再增加一个控制点, 这时将(蓝色线)也连接起来, 同样在线段上按比例t取点, 作为最终的贝塞尔曲线上的点.
类似的, 如果继续增加控制点, 也会用相同的方法按比例新的点, 不再赘述. 显而易见的是, 贝塞尔曲线一定会经过第一个和最后一个控制点, 中间的控制点不保证经过.
2.3.2 公式推导
有了感性的认识以后, 我们再来推导贝塞尔曲线的数学表达.
2.3.2.1 1阶贝塞尔曲线
我们利用基础向量知识, 来计算1阶贝塞尔曲线的点, 是原点
2.3.2.2 2阶贝塞尔曲线
根据之前的推导, 容易得知:
那么类似的, 处于线段的上百分比t的位置, 我们也容易得知
继续展开
2.3.2.3 3阶贝塞尔曲线
再增加一个控制点, 类似的方式, 处于线段的上百分比t的位置, 我们也容易得知
完全展开之后, 我们可以将它写出矩阵的形式:
实际上, 这也就是3阶贝塞尔曲线的完整表达形式.
2.3.2.4 n阶贝塞尔曲线的一般性定义
在上面的推导中, 我们很容易发现, 不管阶数如何增加, 最开始展开时, 都是在低1阶的贝塞尔曲线点组成的线段上按比例取点. 比如上面推导过的3阶贝塞尔曲线:
是由 组成的2阶贝塞尔曲线上的点, 将其定义为
是由 组成的2阶贝塞尔曲线上的点, 将其定义为
那么, 显然可以重新得到3阶贝塞尔曲线的初始展开式:
类似的, 其中的2阶和1阶贝塞尔曲线:
我们发现, 不管阶数是多少, 都是在递归式的展开. 被拿出来多少次, 实际就是概率论中从n个不同元素中取出k个元素的组合方式数. 也就是二项式系数(Binomial coefficient), 我们将其写为:
那么当阶数为n时, 可以写出:
最终, n阶贝塞尔曲线可以整理成如下一般性定义的形式:
举个例子, 当n=5时:
2.3.2 优缺点
优点:
- 计算简单, 资源消耗小
- 高度的平滑性和连续性
- 通过控制点, 易于控制形状
缺点:
- 当控制点数量较多时,曲线的阶数也会相应增加. 既导致曲线变得复杂,也会增加计算资源
- 修改其中一个控制点, 会影响整条贝塞尔曲线的形状
- 通过调整中间控制点, 难以保证曲线远离障碍物
下一节, 我们会解析和运行代码.
参考链接
上一篇
动手学控制理论
下一篇
端到端-理论与实战视频课程
Loading...