贝塞尔曲线 | 玄数

2019-02-23

圆锥曲线三角函数曲线是一组可以演示点有规律的运动的平衡曲线,但生活中还有很多很多的不规则曲线,比如:

是无法用圆锥曲线和三角函数曲线来直接表示的,但如果用最接近的函数经过旋转再组装拼接而来,又会使得展示方法过于复杂。那怎么通过尽可能少的控制点,去生成复杂的平滑曲线呢?其中,贝塞尔曲线 Bezier Curve是其中的一种解决方式,它通过起点和终点,以及若干个控制点,运用带参数的函数,来模拟一条平滑的曲线。

现在以最简单的二阶白塞尔曲线为例,详解它的生成过程。

设线段P0P1,  P1P2都为一个整体1,在P0P1上取点P3,在P1P2上取点P4,再在P3P4上取点P,P为贝塞尔曲线上的一个点,使线段的比值为一个固定值:t/1-t ( 0 < t < 1 ),而且都是以顺时针方向,左边的线段长跟右边的线段长来做比值,即:

现求在起点P0、终点P2为固定点的前提下,控制点P1怎么控制点P的轨迹。

可得

因这个函数是参数函数,上面演示的只是某个具体值,我们现在让t从大于0到小于1来变换,就可得到整个的点的轨迹:

在实际的计算机图形学中怎么画的呢?t取离散值0.02,  0.04,  0.06 … … 0.94,  0.96,  0.98, 逐点连线。 当然,如果你需要更高的精确度,那可取0.01,  0.02,  0.03 … … 0.97,  0.98,  0.99;而如果要节省计算机资源,可允许离散值高一些0.04,  0.08,  0.12 … … 0.90,  0.94,  0.98。

 

因为这是一个关于t的二次幂的函数,所以取名为二阶贝塞尔曲线。那是否有更高阶的贝塞尔曲线呢?当控制点为两个的时候,曲线又会怎么样?

增加一个控制点P2, 再在各线段上分别取点P4、P5、P6、P7、P8 和 P,同样约束比例关系,得:

最终可得关键表达式

即要求出P7、P8由已知点P1、P2、P3、P4 得出的表达式,有两个方法:

方法一:每一个线段比例式逐个求出

 

方法二:把图拆解为两个,每个都只包含一个控制点

可以依据二阶的表达式直接得出

最后求得点P的式

 

点的运动轨迹如图

 

还有四阶、五阶的,它们的表达式的系数及次幂数完全符合 二项式定理与杨辉三角

 

 
 

 
 

贝塞尔曲线有什么用?当你固定起点和终点时,只要改变控制点,就可得到各种不一样的曲线了

 

 
固定链接: http://math001.com/bezier_curve/