`
haierboos
  • 浏览: 444527 次
文章分类
社区版块
存档分类
最新评论

【计算机图形学】四、B样条曲线的生成

 
阅读更多

1.算法




2. 源代码

#include "stdafx.h"


#include "GL/glut.h"
#include "stdlib.h"

void init()
{
	glClearColor(1.0,1.0,1.0,0.0);
	
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0,600.0,0.0,400.0);
}

typedef struct point
{
	float x,y;
}point;

void setPixel(point BsplinePt)
{
	glBegin(GL_POINTS);
	glVertex2f(BsplinePt.x,BsplinePt.y);
	glEnd();
}

float polyNomial(int k,int d,float u)
{
	if(d==1)
	{
		if(u>=float(k)&&u<=float (k+1))
			return 1.0;
		else
			return 0.0;
	}
	else
		return (u-k)/(d-1)*polyNomial(k,d-1,u)+(k+d-u)/(d-1)*polyNomial(k+1,d-1,u);
}

void computeBsplinePt(point* BsplinePt,point* CtrlPt,float u,int nCtrlPt,int degree)
{
	int k;
	float Bkd;
	BsplinePt->x=0.0;
	BsplinePt->y=0.0;
	for(k=0;k<=nCtrlPt-1;k++)
	{
		Bkd=polyNomial(k,degree,u);
		BsplinePt->x+=CtrlPt[k].x*Bkd;
		BsplinePt->y+=CtrlPt[k].y*Bkd;
	}
}

void Bspline(point* CtrlPt,int nCtrlPt,int degree)
{
	float u,du=0.001;
	point BsplinePt;
    
	for(u=degree-1;u<=nCtrlPt;)
	{
		computeBsplinePt(&BsplinePt,CtrlPt,u,nCtrlPt,degree);
		setPixel(BsplinePt);
		u+=du;
	}

}

void render()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0,0.0,0.0);
	
	point CtrlPt[5]={{50.0,50.0},{150.0,300.0},{250.0,150.0},{300.0,350.0},{500.0,50.0}};
	int nCtrlPts=5,degree=3;
	
	Bspline(CtrlPt,nCtrlPts,degree);
	
	glFlush();
}

int main(int argc, char* argv[])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowPosition(50,100);
	glutInitWindowSize(600,400);
	glutCreateWindow("B Spline");
	
	init();
	glutDisplayFunc(render);
	glutMainLoop();
	
	return 0;
}

3. 结果


分享到:
评论

相关推荐

    计算机图形学:B样条曲线生成算法

    基于OPENGL的B样条曲线生成算法,运行时可拖动特征点,动态调整画出相应的B样条曲线形状

    B样条曲线生成_简单的C++实现

    针对B样条曲线的生成,采用deboor算法根据控制点生成相应的曲线上的坐标值。本资源包含了基函数的计算函数,节点向量的生成函数,一个简单的应用实例。

    第四章 计算机图形学二次曲线

    计算机图形学MFC二次曲线计算机图形学MFC二次曲线计算机图形学MFC二次曲线

    图形学Bezier曲线和B样条曲面

    本资源包含了Bezier曲线和B样条曲面的代码实现,非常美观,还带了排版规整的实验报告,源代码基于c,下载即可运行,欢迎交流,请勿抄袭

    计算机图形学之画曲线

    本资源摘要信息将详细介绍计算机图形学中的画曲线问题,並且使用C语言实现Hermite插值曲线、Bezier曲线和B样条曲线。 一、Hermite插值曲线 Hermite插值曲线是一种常用的曲线绘制方法,它可以根据给定的控制点来...

    OpenGL交互式绘制三次B样条曲线

    在OpenGL的基础上进行编写,绘制三次B样条曲线,可以通过鼠标设置控制点位置、拖动控制点观察曲线动态变化

    计算机图形学 BSpline曲线画图

    掌握三次B样条曲线的生成算法,掌握三次B样条曲线与控制折线的几何关系。 实验要求: 要求根据给定的控制点个数,用鼠标输入控制点并绘制控制折线,生成并显示由给定控制折线确定的三次B样条曲线。 实验原理: ...

    计算机图形学编程.pdf

    Bezier 曲线和B样条曲线是一种常见的曲线,在计算机图形学中经常用来模拟物体的运动轨迹。该程序使用以下步骤来绘制Bezier 曲线和B样条曲线: 1. 计算Bezier 曲线和B样条曲线的参数,包括四个控制点。 2. 使用...

    计算机图形学第五章曲线曲面生成(共36张PPT)精选.pptx

    拟合曲线的生成方法包括Ferguson曲线、Bezier曲线和B样条曲线等。 Ferguson曲线是一种常用的拟合曲线方法,它可以用来描述复杂的曲线形状。Bezier曲线是另一種常用的拟合曲线方法,它可以用来描述光滑的曲线形状。B...

    计算机图形学曲线生成算法

    B样条 参数样条曲线 贝萨尔曲线。。可以手动输入参数点。。MFC

    使用三次B样条曲线生成曲线MFC/C++

    计算机图形学课程设计题目,使用鼠标边点击边边生成曲线,而且还能实现实现绘制出三次B样条的的切线。

    【计算机图形学】实验四 Bezier曲线生成 源码

    源博客在(含解压码): ... 实验四 Bezier曲线生成 (1)结合示范代码了解曲线生成原理与算法实现,尤其是Bezier曲线; (2)调试、编译、修改示范程序。 (3)尝试实现B样条曲线算法。

    课件 计算机图形学 贝塞尔曲线及B样条.ppt

    计算机图形学贝塞尔曲线及B样条 贝塞尔曲线是计算机图形学中的一种重要曲线,用于描述复杂的曲面和曲线。贝塞尔曲线的提出是为了解决抛物样条曲线和三次参数样条曲线在外形设计中缺少直观性和灵活性的问题。 ...

    B.rar_B样条曲线

    计算机图形学中B样条曲线的生成,编译软件为VC++编码

    基于B样条曲线的路径规划(Python实现)

    B样条曲线是一种常用的数学曲线插值方法,它通过控制点和节点向量来定义曲线形状。在路径规划中,B样条曲线可以用于生成平滑的路径,以满足机器人、无人...此外,B样条曲线还可以应用于计算机图形学、动画制作等领域。

    计算机图形学基础-pdf.zip

    8.7.2GLU中的B样条曲线/曲面函数 第9章消隐 9.1深度缓存器算法 9.2区间扫描线算法 9.3深度排序算法 9.4区域细分算法 9.5光线投射算法 9.6BSP树 9.7多边形区域排序算法 9.8OpenGL中的消隐处理 ...

    基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(源码+说明文档).rar

    1、资源内容:基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(完整源码+说明文档+基础教程+数据).rar 2、代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3、适用对象:计算机,电子信息...

    基于遗传算法和B样条曲线的平滑避障路径规划.pdf

    B样条曲线是一种常用的曲线生成算法,能够生成平滑的曲线。通过结合这两种算法,可以生成连续平滑的避障路径,避免了传统路径规划中的不连续点问题。 该方法的优点在于可以避免机器人的运动方向突变,解决了路径...

    计算机图形学实习

    Bezier曲线、B样条曲线;多边形;字符。 多边形填充: 种子填充、边缘填充、扫描线填充。 图形裁剪: 多边形裁剪、Cohen-Sutherland算法、圆裁剪。 图形的几何变换: 平移、对称、旋转、缩放。 三维图形的消隐及...

    计算机图形学实验(源程序)

    这些程序中,有不少算法是对书上所讲算法的改进和创新(我们用的是北京大学出版社出版的那本《计算机图形学》),并在实践过程中...Coons曲面、Bezier曲面、B样条曲面等常用曲面的生成算法。并给出一些综合应用的例子。

Global site tag (gtag.js) - Google Analytics