简介
贝塞尔曲线(Bézier curve)又被称为贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线,它的数学基础是伯恩斯坦多项式(Bernstein polynomial,since 1912),1959年法国数学家Paul de Casteljau提出了数值稳定的de Casteljau算法,开始贝塞尔曲线的图形化应用研究,而贝塞尔曲线的名称来源于一位就职于雷诺的法国工程师Pierre Bézier,他在1962年开始对贝塞尔曲线做了广泛的宣传,他使用这种只需要很少的控制点就能生成复杂平滑曲线的方法来进行汽车车体的工业设计。
贝塞尔曲线因为它控制简便却具有极强的描述能力,迅速在工业设计和计算机图形学等相关领域得到了广泛应用。比如在矢量绘图中,贝塞尔曲线用来给需要无限制地缩放的平滑曲线定模,许多绘图软件都提供了绘制贝塞尔曲线的功能。贝塞尔曲线还用于动画时间控制以实现美观逼真的缓动效果,还用于机器人转动手臂等方面的设计。
对于贝塞尔曲线来说,最重要的点是,数据点和控制点。
数据点: 指一条路径的起始点和终止点。
控制点:控制点决定了一条路径的弯曲轨迹,根据控制点的个数,贝塞尔曲线被分为一阶贝塞尔曲线(0个控制点)、二阶贝塞尔曲线(1个控制点)、三阶贝塞尔曲线(2个控制点)等等。从1-n阶的连续函数,都可以计算得到一条光滑曲线。
贝塞尔曲线展示
以下公式中:B(t)为t时间下点的坐标,P0为起点,Pn为终点,Pi为控制点
一阶贝塞尔曲线
二阶贝塞尔曲线
三阶贝塞尔曲线
四阶贝塞尔曲线![四阶贝塞尔曲线](https://img-blog.csdnimg.cn/20200409113538469.gif#pic_center)
五阶贝塞尔曲线
通用公式:
cocos引擎中的Bezier
cocos-2dx引擎中自带的是三阶贝塞尔曲线,需要两个控制点,可以通过让两个控制点坐标相同,转化成二阶,即抛物线。
推荐一个网站,可以模拟和生成多种样式的曲线在线生成贝塞尔曲线(英文)或在线生成贝塞尔曲线(中文)
C++函数原型
//结构体
typedef struct _ccBezierConfig {
Vec2 endPosition; // end position of the bezier
Vec2 controlPoint_1; // Bezier control point 1
Vec2 controlPoint_2; // Bezier control point 2
} ccBezierConfig;
// BezierTo创建函数
static BezierTo* create(float t, const ccBezierConfig& c);
参数解读
endPosition:曲线的终点
controlPoint_1: 曲线起点的控制点(控制第一个波峰或波谷)
controlPoint_2:曲线终点的控制点(控制第二个波峰或波谷)
当 controlPoint_1 == controlPoint_2 时,曲线只有一个波峰或波谷
注意:lua中调用的时候,参数的顺序发生了变化,下面截取了部分代码
ccBezierConfig config;
config.controlPoint_1