贝塞尔曲线是应用于二维图像程序的数学曲线,曲线有起始点,终止点,控制点。通过调整控制带你,贝塞尔曲线的形状会发生改变
首先使用三阶贝塞尔曲线对de Casteijau算法的思想:
设p0,p02,p2是一条抛物线上的三个不同的点,过p0和p2点的两个切线交于p1点,在p02点的切线交p0p1和p2p1于p01和p11,则比例与图像如下:
t从0变到1,第三个式子表示了由三顶点p0,p1,p2三点定义的一条二次bezier曲线,这二次bezier曲线p02可以定义为分别由前两个顶点p0 p1和后两个顶点p1 p2决定的一次bezier曲线的线性组合
后面依次类推
由四个控制点定义的三次bezier曲线p03被定义为由(p0,p1,p2) 和 (p1,p2,p3)确定的二条二次bezier曲线的线性组合;由(n+1)个控制点定义的n次bezier曲线p0n可被定义为前后n个控制点定义的两条(n-1)次bezier曲线p0n-1和p1n-1的线性组合,并可以得到bezier曲线的递推计算公式
bezier曲线的数学表达式:
#include<GL/glut.h>
#include<stdlib.h>
int width, height;
int N = -1;
GLfloat Bfunc[15] = {
0.0 };
GLfloat point[15][2] = {
0.0 };
void Init()
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
}
void ChangeSize(int w, int h)
{
GLfloat nRange = 1.0f;
if (h == 0) h = 1;
glViewport(0, 0, w, h);
width = w;
height = h;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 设置修剪空间
if (w <= h)
glOrtho(0.0, 0.0, -nRange * h / w, nRange * h / w, 0.0, 0.0);
else
glOrtho(-nRange * w / h, nRange * w / h, 0.0, 0.0, 0.0,