0阶贝塞尔函数_曲线篇: 贝塞尔曲线

v2-a7824e4604d5e2e3ba463d795e1aa191_1440w.jpg?source=172ae18b

最近正在研究贝塞尔曲线. 在学习之际也把自己的思路写下来.

下面的链接可以拖拽贝塞尔的点, 先感受一下贝塞尔曲线的圆润.

Animated Bézier Curves​www.jasondavies.com
v2-da45eee08011520e75ac6c2d5e5bf132_180x120.jpg

贝塞尔曲线的历史:

贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线.

贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 我就是想在路径规划中

贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制. 画重点了啊: 递归

一阶曲线:

v2-770487eacf3b9d5973e2783b6d8698e5_b.jpg
对于一阶贝塞尔曲线为我们可以看到是一条直线,通过几何知识,很容易根据t的值得出线段上那个点的坐标:

v2-4a70bb17e8c6ff69d500a51279ad8168_b.png

v2-c46560ce827259afc6f00d2ac62e333e_b.png

一阶曲线就是很好理解, 就是根据t来的线性插值. P0表示的是一个向量 [x ,y], 其中x和y是分别按照这个公式来计算的.

二阶贝塞尔:

既然重点是递归, 那么二阶贝塞尔必然和一阶有关系.

v2-37a771c117aaa5fe7066cefed7b262c5_b.jpg

v2-5e12173d9bf5235804baf1f2c900bf26_b.jpg
在平面内任选 3 个不共线的点,依次用线段连接。在第一条线段上任选一个点 D。计算该点到线段起点的距离 AD,与该线段总长 AB 的比例。

v2-c269abf84bea8a1ebed4c3808cd3e8b2_b.jpg
根据上一步得到的比例,从第二条线段上找出对应的点 E,使得 AD:AB = BE:BC。

v2-b5b6314c8554b990f7a838edaf02c3e6_b.jpg

v2-77478be23c35ccda6a364bf0b5c1d59f_b.jpg

这时候DE又是一条直线了, 就可以按照一阶的贝塞尔方程来进行线性插值了, t= AD:AE

这时候就可以推出公式了.

v2-dc5199871f54458ca1bf6e6210eb0cf7_b.jpg
推公式的主图

v2-63b944c8415ef9377f64b753b2e3444b_b.png
对应着上图绿色线段的左端点

v2-3ae58f5b6f278bf479e5fb34e1088dd5_b.png
对应着上图绿色线段的右端点

v2-2befe4f53ca6f35c928ed5a11c8bef2d_b.jpg
对应着绿色线段的一阶贝塞尔曲线(线性插值)

v2-3e925055f4f7e8560fc1f6f067f10410_b.png
整理一下公式, 得到二阶贝塞尔公式

三阶贝塞尔曲线:

v2-a21fa508bd84b4ac47da46f24975c31a_b.jpg

二阶的贝塞尔通过在控制点之间再采点的方式实现降阶, 每一次选点都是一次的降阶.

四个点对应是三次的贝塞尔曲线. 分别在 AB BC CD 之间采EFG点, EFG三个点对应着二阶贝塞尔, 在EF FG之间采集HI点来降阶为一阶贝塞尔曲线.

v2-fc53d360175b2f90f342e4e5d865c403_b.jpg

高阶贝塞尔曲线:

高阶的贝塞尔可以通过不停的递归直到一阶

贝塞尔曲线 公式

可以通过递归的方式来理解贝塞尔曲线, 但是还是给出公式才方便计算的.

v2-3f8cc276720acf0b70bb384927c55a1f_b.jpg

v2-3df1dfa3786bbfec8af0e65be2cee46a_b.png

仔细看可以发现, 贝塞尔的参数B是二项式(t+(1-t))^n = (1)^n的展开公式. 划重点了: 系数是二项式的展开.后面的很多的贝塞尔曲线的性质都可以用这个来解释

贝塞尔曲线的导数

变化一下贝塞尔公式:

v2-84173b544edfc8318c1419b1d5eb2588_b.jpg

v2-86305219864698643464bb5115ac85ab_b.jpg
和上文中的公式相同, 但是有一些字母的替换, 表达习惯不同

控制点是独立的, 因此求导是直接对u就行求导, 就是仅仅对参数项B进行求导.

v2-f19469e6e4cfc93b71e755e199557770_b.png

v2-0ec79f5b2e4949e224b165a3a07412c1_b.png

定义: Q0=n*(P1-P0), Q0=n*(P2-P1), Q0=n*(P3-P2),...Qn-1=n*(Pn-Pn-1), . 如果我们把Q当做一组新的控制点, 那么原贝塞尔的导数可以写成如下:

v2-217e60bb1d243a59347ea62244125147_b.jpg

导数还是贝塞尔曲线, 只不过是控制点是原来控制点的组合而已.

This derivative curve is usually referred to as the hodographof the original Bézier curve. 贝塞尔的导数可以理解为原贝塞尔的速度曲线.(瞎翻译的)

v2-64fbaa74649fe36c24c4b19606833310_b.jpg
七阶贝塞尔曲线和其导数曲线(六阶贝塞尔曲线)

以此类推:

v2-2cd5ce4b1d5b0a076da37ce0621ffe50_b.jpg

v2-939b2efc7665624a72d35701c6c15c5b_b.jpg

可以得出一个很有趣的结论, 贝塞尔曲线的导数还是贝塞尔曲线.

贝塞尔曲线的性质

1 各项系数之和为1.

这个很好理解,因为是系数是二项式的展开(t+(1-t))^n = (1)^n非负性. 好理解, 二项式的展开啊

2 对称性

第i项系数和倒数第i项系数相同, 从二项式的展开来思考,这个也好理解

3 递归性

递归性指其系数满足下式:

v2-4b0f83182282f233bb0aecd671e560e6_b.png

这个好理解, 因为我们就是从递归来理解贝塞尔曲线的

4 凸包性质

贝塞尔曲线始终会在包含了所有控制点的最小凸多边形中, 不是按照控制点的顺序围成的最小多边形. 这点大家一定注意. 这一点的是很关键的,也就是说可以通过控制点的凸包来限制规划曲线的范围,在路径规划是很需要的一个性质.

5端点性质

第一个控制点和最后一个控制点,恰好是曲线的起始点和终点.这一点可以套用二项式展开来理解,t=1或者0的时候,相乘二项式的系数,出了初始点或者末尾点,其余的都是0.

6一阶导数性质

v2-72fb3ab846dbca16e5dc56eb53a05624_b.jpg

假设上图中贝塞尔的t是由左到右从0到1增加的,那么贝塞尔曲线在t=0时的导数是和P0P1的斜率(导数)是相同,t=1时的导数是和P3P4的斜率(导数)是相同

v2-ded1b58d4f6f4e91bcdd7e837ecbb8a9_b.jpg

这一点的性质可以用在贝塞尔曲线的拼接,只要保证三点一线中的中间点是两段贝塞尔曲线的连接点,就可以保证两端贝塞尔曲线的导数连续连续.导数连续是曲线的G1连续. 如果保证C1连续呢?

如果不懂G1和C1连续的意义, 先看我之前写的这篇文章.

FrancisZhao:曲线篇: 曲线的几何连续和参数连续​zhuanlan.zhihu.com
v2-e8b0b1df73e136e27788bde9a566ea17_180x120.jpg

如果保证两段贝塞尔拼接曲线的曲率连续呢?控制点要怎么排布呢?

这就非常的复杂了, 建议直接参考下文:

Bezier曲线的拼接及其连续性 - 图文 - 百度文库​wenku.baidu.com


专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。
欢迎指正讨论,转载请注明,认同请点赞。
这个系列的文章很容易出错,希望大佬们多多指正补充。
仅仅收藏是学不会的,还得点赞。

v2-fffd731f067256098d70bd564d5ae197_b.jpg
FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.com
v2-4669c1af11d7aed20c093632bc99cfc3_180x120.jpg

参考资料

https://www.biaodianfu.com/bezier-curve.htmlhttp://www.whudj.cn/?p=384https://www.qiujiawei.com/bezier-1/https://zhuanlan.zhihu.com/p/130247362https://github.com/antvis/g6/issues/135

HKUST-Aerial-Robotics/Fast-Planner

https://pomax.github.io/bezierinfo/

最好的参考资料如下:

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/​pages.mtu.edu