这一篇让你彻底搞懂贝塞尔曲线

简介: 贝塞尔曲线不懂画?不知道怎么回事?看这一篇就够了!用图形,点曲线运动图和公式推导,让你彻底搞懂贝塞尔曲线的运行原理!

贝塞尔曲线介绍

我们在前面讲了绘制自定义曲线,而实际开发过程还会遇到更复杂的图形绘制,比如下面的这些图形:
image.png
这时候就需要用到贝塞尔曲线了。下面是百科关于贝塞尔曲线的介绍。

贝塞尔曲线就是这样的一条曲线,它是依据四个位置任意的点坐标绘制出的一条光滑曲线。在历史上,研究贝塞尔曲线的人最初是按照已知曲线参数方程来确定四个点的思路设计出这种矢量曲线绘制法。贝塞尔曲线的有趣之处更在于它的“皮筋效应”,也就是说,随着点有规律地移动,曲线将产生皮筋伸引一样的变换,带来视觉上的冲击。1962年,法国数学家 Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名是为贝塞尔曲线。

这上面的介绍实际有点不太正确,三次贝塞尔曲线才需要4个点,而还有一次贝塞尔曲线(实际是线段),二次次贝塞尔曲线以及高阶贝塞尔曲线,只是我们常用的是三次贝塞尔曲线。要理解贝塞尔曲线怎么来的还得从1次贝塞尔曲线和2次贝塞尔曲线说起。

一次贝塞尔曲线

image.png

如上图所示,P 点随时间 t 在 P0到 P1两点之间的线段移动,t=0时刻,P 点和 P0重合,t=1时刻 P 点和 P1重合。最终推导得到 P 点的位置和 P0,P1及 t 的关系是一个线性插值函数:
image.png

二次贝塞尔取曲线

二次贝塞尔曲线控制点有3个,如下图所示。

image.png

一共有 P0、P1和 P2三个控制点,那P 点的位置怎么来的呢?其实P 点是 A 点到 B 点的一次贝塞尔曲线,而 A 点是 P0到 P1的一次贝塞尔曲线,B 点是 P1到 P2的一次贝塞尔曲线。随着时间 t 的变化,A 点和 B 点的位置会改变,从而使得 P 点会沿着 P0、P1到 P2的一段曲线运动,而更为神气的是这是一条平滑的曲线。下面是数学公式推导和实际的动图演示。

image.png

二次贝塞尔曲线.gif

三次贝塞尔曲线

有了二次贝塞尔曲线的推导过程,实际上三次贝塞尔曲线的推导过程是一样的。

image.png

三次贝塞尔曲线有4个控制点,上图各个点的关系如下:

  • A 点是 P0到 P1的一次贝塞尔曲线,B 点是 P1到 P2的一次贝塞尔曲线,C 点是 P2到 P3的一次贝塞尔曲线;
  • D 点是 A 点到 B 点的一次贝塞尔曲线(也是 P0,P1和 P2的二次贝塞尔曲线),E 点是 B 点到 C 点的一次贝塞尔曲线(也是 P1,P2到 P3的二次贝塞尔曲线);
  • P 点是 D 点到 E 点的一次贝塞尔曲线,也是 A ,B 和 C 的二次贝塞尔曲线,进而就是 P0,P1,P2和 P3的三次贝塞尔曲线了。

下面是动图展示 P 点的移动过程。

三次贝塞尔曲线.gif

数学公式推导过程如下:
image.png

高阶贝塞尔函数

实际上,贝塞尔函数还可以继续增加控制点,推导的过程都是一样的,只是随着点数的增加,计算的量会越大,而我们大多数情况下用三阶贝塞尔曲线就足够了。

总结

本篇介绍了贝塞尔函数的概念,运动点的过程和公式推导,相信通过这些内容,大家应该能够知道贝塞尔曲线怎么回事了。下一篇我们来用 Flutter 绘制贝塞尔曲线,体验一下数学之美!


欢迎关注个人公众号:岛上码农

相关文章
|
5月前
一文搞懂:三角形的余弦定理
一文搞懂:三角形的余弦定理
57 0
|
6月前
代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
38 0
|
6月前
|
存储
面试题 05.08:绘制直线
面试题 05.08:绘制直线
43 0
|
6月前
|
机器学习/深度学习 算法
面试题 01.07:旋转矩阵
面试题 01.07:旋转矩阵
31 0
Leecode 836. 矩形重叠最简单易懂的一个思想
Leecode 836. 矩形重叠最简单易懂的一个思想
44 0
|
机器学习/深度学习 存储 算法
(建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)
在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径。
6473 2
(建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)
|
算法 Python
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
175 0
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
|
Python
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
457 0
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
|
算法
贝塞尔曲线原理(简单阐述)
原文:贝塞尔曲线原理(简单阐述) 原理和简单推导(以三阶为例): 设P0、P02、P2是一条抛物线上顺序三个不同的点。过P0和P2点的两切线交于P1点,在P02点的切线交P0P1和P2P1于P01和P11,则如下比例成立: 这是所谓抛物线的三切线定理。
1577 0
动画曲线天天用,你能自己整一个吗?看完这篇你就会了!
一旦用到动画,曲线 Curve 类不可避免会用到,但是用了那么多,你真的了解怎么用吗?本篇为你详细解读 Curve 类的实现,看完你就会设计自己的动画曲线了!
169 0
动画曲线天天用,你能自己整一个吗?看完这篇你就会了!