最近正在研究贝塞尔曲线. 在学习之际也把自己的思路写下来.
下面的链接可以拖拽贝塞尔的点, 先感受一下贝塞尔曲线的圆润.
贝塞尔曲线的历史:
贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线.
贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 我就是想在路径规划中
贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制. 画重点了啊: 递归
一阶曲线:
![](https://pic2.zhimg.com/80/v2-770487eacf3b9d5973e2783b6d8698e5_720w.jpg)
![](https://pic1.zhimg.com/80/v2-4a70bb17e8c6ff69d500a51279ad8168_720w.png)
![](https://pic3.zhimg.com/80/v2-c46560ce827259afc6f00d2ac62e333e_720w.png)
一阶曲线就是很好理解, 就是根据t来的线性插值. P0表示的是一个向量 [x ,y], 其中x和y是分别按照这个公式来计算的.
二阶贝塞尔:
既然重点是递归, 那么二阶贝塞尔必然和一阶有关系.
![](https://pic2.zhimg.com/80/v2-37a771c117aaa5fe7066cefed7b262c5_720w.jpg)
![](https://pic3.zhimg.com/80/v2-5e12173d9bf5235804baf1f2c900bf26_720w.jpg)
![](https://pic3.zhimg.com/80/v2-c269abf84bea8a1ebed4c3808cd3e8b2_720w.jpg)
![](https://pic3.zhimg.com/80/v2-b5b6314c8554b990f7a838edaf02c3e6_720w.jpg)
![](https://pic4.zhimg.com/80/v2-77478be23c35ccda6a364bf0b5c1d59f_720w.jpg)
这时候DE又是一条直线了, 就可以按照一阶的贝塞尔方程来进行线性插值了, t= AD:AE
这时候就可以推出公式了.
![](https://pic4.zhimg.com/80/v2-dc5199871f54458ca1bf6e6210eb0cf7_720w.jpg)
![](https://pic4.zhimg.com/80/v2-63b944c8415ef9377f64b753b2e3444b_720w.png)
![](https://pic2.zhimg.com/80/v2-3ae58f5b6f278bf479e5fb34e1088dd5_720w.png)
![](https://pic2.zhimg.com/80/v2-2befe4f53ca6f35c928ed5a11c8bef2d_720w.jpg)
![](https://pic1.zhimg.com/80/v2-3e925055f4f7e8560fc1f6f067f10410_720w.png)
三阶贝塞尔曲线:
![](https://pic3.zhimg.com/80/v2-a21fa508bd84b4ac47da46f24975c31a_720w.jpg)
二阶的贝塞尔通过在控制点之间再采点的方式实现降阶, 每一次选点都是一次的降阶.
四个点对应是三次的贝塞尔曲线. 分别在 AB BC CD 之间采EFG点, EFG三个点对应着二阶贝塞尔, 在EF FG之间采集HI点来降阶为一阶贝塞尔曲线.
![](https://pic4.zhimg.com/80/v2-fc53d360175b2f90f342e4e5d865c403_720w.jpg)
高阶贝塞尔曲线:
高阶的贝塞尔可以通过不停的递归直到一阶
贝塞尔曲线 公式
可以通过递归的方式来理解贝塞尔曲线, 但是还是给出公式才方便计算的.
![](https://pic4.zhimg.com/80/v2-3f8cc276720acf0b70bb384927c55a1f_720w.jpg)
![](https://pic3.zhimg.com/80/v2-3df1dfa3786bbfec8af0e65be2cee46a_720w.png)
仔细看可以发现, 贝塞尔的参数B是二项式(t+(1-t))^n = (1)^n的展开公式. 划重点了: 系数是二项式的展开. 后面的很多的贝塞尔曲线的性质都可以用这个来解释
贝塞尔曲线的导数
变化一下贝塞尔公式:
![](https://pic1.zhimg.com/80/v2-84173b544edfc8318c1419b1d5eb2588_720w.jpg)
![](https://pic4.zhimg.com/80/v2-86305219864698643464bb5115ac85ab_720w.jpg)
控制点是独立的, 因此求导是直接对u就行求导, 就是仅仅对参数项B进行求导.
![](https://pic1.zhimg.com/80/v2-f19469e6e4cfc93b71e755e199557770_720w.png)
![](https://pic2.zhimg.com/80/v2-0ec79f5b2e4949e224b165a3a07412c1_720w.png)
定义: Q0=n*(P1-P0), Q0=n*(P2-P1), Q0=n*(P3-P2),...Qn-1=n*(Pn-Pn-1), . 如果我们把Q当做一组新的控制点, 那么原贝塞尔的导数可以写成如下:
![](https://pic4.zhimg.com/80/v2-217e60bb1d243a59347ea62244125147_720w.jpg)
导数还是贝塞尔曲线, 只不过是控制点是原来控制点的组合而已.
This derivative curve is usually referred to as the hodograph of the original Bézier curve. 贝塞尔的导数可以理解为原贝塞尔的速度曲线.(瞎翻译的)
![](https://pic1.zhimg.com/80/v2-64fbaa74649fe36c24c4b19606833310_720w.jpg)
以此类推:
![](https://pic1.zhimg.com/80/v2-2cd5ce4b1d5b0a076da37ce0621ffe50_720w.jpg)
![](https://pic4.zhimg.com/80/v2-939b2efc7665624a72d35701c6c15c5b_720w.jpg)
可以得出一个很有趣的结论, 贝塞尔曲线的导数还是贝塞尔曲线.
贝塞尔曲线的性质
1 各项系数之和为1.
这个很好理解,因为是系数是二项式的展开(t+(1-t))^n = (1)^n非负性. 好理解, 二项式的展开啊
2 对称性
第i项系数和倒数第i项系数相同, 从二项式的展开来思考,这个也好理解
3 递归性
递归性指其系数满足下式:
![](https://pic3.zhimg.com/80/v2-4b0f83182282f233bb0aecd671e560e6_720w.png)
这个好理解, 因为我们就是从递归来理解贝塞尔曲线的
4 凸包性质
贝塞尔曲线始终会在包含了所有控制点的最小凸多边形中, 不是按照控制点的顺序围成的最小多边形. 这点大家一定注意. 这一点的是很关键的,也就是说可以通过控制点的凸包来限制规划曲线的范围,在路径规划是很需要的一个性质.
5端点性质
第一个控制点和最后一个控制点,恰好是曲线的起始点和终点.这一点可以套用二项式展开来理解,t=1或者0的时候,相乘二项式的系数,出了初始点或者末尾点,其余的都是0.
6一阶导数性质
![](https://pic1.zhimg.com/80/v2-72fb3ab846dbca16e5dc56eb53a05624_720w.jpg)
假设上图中贝塞尔的t是由左到右从0到1增加的,那么贝塞尔曲线在t=0时的导数是和P0P1的斜率(导数)是相同,t=1时的导数是和P3P4的斜率(导数)是相同
![](https://pic2.zhimg.com/80/v2-ded1b58d4f6f4e91bcdd7e837ecbb8a9_720w.jpg)
这一点的性质可以用在贝塞尔曲线的拼接,只要保证三点一线中的中间点是两段贝塞尔曲线的连接点,就可以保证两端贝塞尔曲线的导数连续连续.导数连续是曲线的G1连续. 如果保证C1连续呢?
如果不懂G1和C1连续的意义, 先看我之前写的这篇文章.
如果保证两段贝塞尔拼接曲线的曲率连续呢?控制点要怎么排布呢?
这就非常的复杂了, 建议直接参考下文:
专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。
欢迎指正讨论,转载请注明,认同请点赞。
这个系列的文章很容易出错,希望大佬们多多指正补充。
仅仅收藏是学不会的,还得点赞。
![](https://pic4.zhimg.com/80/v2-fffd731f067256098d70bd564d5ae197_720w.jpg)
参考资料
https://www.biaodianfu.com/bezier-curve.html
http://www.whudj.cn/?p=384
https://www.qiujiawei.com/bezier-1/
https://zhuanlan.zhihu.com/p/130247362
https://github.com/antvis/g6/issues/135
HKUST-Aerial-Robotics/Fast-Planner
https://pomax.github.io/bezierinfo/
最好的参考资料如下:
评论(0)
您还未登录,请登录后发表或查看评论