图形学-几何-曲线-贝塞尔曲线
在空间中,曲线有重要的作用,例如可以在空间中定义一条曲线,摄像机或者物体沿着曲线运动;另外字体可以用曲线来表示,也成矢量,这样字体无论拉多大都不会出现锯齿。
做一条曲线的方法,比较广为人知的是贝塞尔曲线,在PS之类的软件经常用到。
贝塞尔曲线的表示方法
贝塞尔认为,用N个点(N≥3),可以表示一条唯一的曲线。下图表示用4个点表示一条曲线:
表示的规则为:
1.出发方向一定为P0->P1;
2.结束方向一定为P2->P3;
3.有一个点,按照上面规定的方向,随着时间t不断行走,从起点走到终点,走过的路径即为贝塞尔曲线。
也可以理解为,有无数个连续的点,每个点随着时间t有一个对应的坐标,这些坐标的集合即这条贝塞尔曲线。
因此计算贝塞尔曲线,相当于是求出一个公式,这个公式即P0-P3每个点与t的关系。
贝尔塞曲线的表示方法
下图表示一条3个点确定的贝尔塞曲线的表示方法:
1.在b0->b1,b1->b2两条直线上,都分别计算出一个点,这个点根据t值插值表示,如在b0->b1上表示为(1 − t)b0 + tb1;
2.得到的这2个点,连成1条线,再根据t值做插值。得到的这个点,即认为是在t时刻曲线上的一点。
3.用这样的方法,只要t在[0, 1]上过一遍,即可得到曲线上所有的点。
类似的,这是4个点的贝塞尔曲线。
点随着t的变化,可以用公式表示为
我们发现这个公式就是一个多项式展开式,每一项即为每个点与t的关系。如有3点,为有3个系数,分别与b0、b1、b2相乘,再相加。而系数就是多项式系数
,也记为
类似的,如果有4个点,则肯定是4项相加(在二维或三维上通用),表示为
我们称这个多项式系数为“伯恩斯坦多项式”
从上图可以看到,伯恩斯坦多项式每一项的系数加起来等于1。说明伯恩斯坦多项式实际上做的事情是权重(点到t的距离)插值计算。
用伯恩斯坦多项式的系数乘每个点,即得到N阶贝塞尔曲线的表达公式:
贝塞尔曲线的一些性质(以3个点为例):
1.曲线一定经过b0和b3;
2.起始点的切线长度是3倍的(b1-b0),终点的切线长度是3倍的(b3-b2);
3.仿射变换后的曲线,等于N个点先做仿射变换再连起来的曲线;
4.N个点做出的贝塞尔曲线,一定在由这几个点围城的凸包内。
凸包性质可以用来判断,如果几个点做出的贝尔塞曲线是一条直线,那这几个点一定在一条直线上。