贝塞尔曲线思想及简单cpp实现

本文介绍了贝塞尔曲线的基本概念,强调其在二维图像处理中的应用。通过阐述de Casteljau算法,详细解释了如何利用控制点来改变曲线形状。特别地,文章探讨了三阶贝塞尔曲线,并提供了递推计算公式,为读者展示了三次贝塞尔曲线如何由二次贝塞尔曲线的线性组合构成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贝塞尔曲线是应用于二维图像程序的数学曲线,曲线有起始点,终止点,控制点。通过调整控制带你,贝塞尔曲线的形状会发生改变

首先使用三阶贝塞尔曲线对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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值