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

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

贝塞尔曲线介绍

我们在前面讲了绘制自定义曲线,而实际开发过程还会遇到更复杂的图形绘制,比如下面的这些图形:
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 绘制贝塞尔曲线,体验一下数学之美!


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

相关文章
|
3天前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 221. 最大正方形 算法解析
☆打卡算法☆LeetCode 221. 最大正方形 算法解析
|
3天前
|
机器学习/深度学习 算法
面试题 01.07:旋转矩阵
面试题 01.07:旋转矩阵
20 0
|
3天前
|
存储
面试题 05.08:绘制直线
面试题 05.08:绘制直线
20 0
|
7月前
|
存储 算法 Java
基于Y向连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】
基于Y向连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】
115 0
|
11月前
形图案(牛客)
形图案(牛客)
|
11月前
Leecode 836. 矩形重叠最简单易懂的一个思想
Leecode 836. 矩形重叠最简单易懂的一个思想
31 0
|
算法
秒懂算法 | 计算几何:圆
计算几何的基础是点积和叉积,它们定义了向量的大小和方向的关系,是其他计算几何概念和算法的出发点。在点积和叉积的基础上,本篇重点介绍圆覆盖。 计算几何题目的代码大多繁琐冗长,因此掌握模板代码是学习计算几何的关键。本篇精心组织了经典的几何模板
18024 1
秒懂算法 | 计算几何:圆
|
算法 Python
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
135 0
考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】
|
Python
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
376 0
考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
|
机器学习/深度学习 存储 算法
(建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)
在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径。
805 0
(建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)