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

【计算机图形学】四、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样条曲线生成算法

    计算机图形学是IT领域的一个...总的来说,B样条曲线生成算法是计算机图形学中的核心概念,它在游戏开发、视觉效果和工程设计等许多领域都有广泛应用。理解和掌握这种算法,对于提升你在IT行业的专业技能是非常有益的。

    B样条曲线计算机图形学

    计算机图形学是信息技术领域的一个重要分支,它涉及图像的生成、处理和显示。...这个实验项目为你提供了一个宝贵的实践平台,让你能够亲手构建一个可视化的B样条曲线生成器,进一步巩固理论知识,提高编程能力。

    计算机图形学B样条曲线绘制枫叶

    计算机图形学是一门涵盖广泛领域的学科,涉及到图像的生成、处理和交互技术。在本案例中,我们将聚焦于“B样条曲线绘制枫叶”这一主题。B样条(B-Spline)曲线是一种在计算机图形学中广泛使用的数学工具,用于创建...

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

    在C++中,实现B样条曲线生成通常包括以下几个关键部分: 1. **基函数计算**:编写计算B样条基函数的函数。这涉及到递归地应用卡塞尔(Knot Insertion)公式或直接使用de Boor公式。 2. **节点向量生成**:确定B样...

    三次B样条曲线算法 计算机图形学 案例代码

    三次B样条曲线算法是计算机图形学中一种广泛使用的数学工具,用于生成平滑的曲线。在本案例中,我们关注的是如何通过编程实现这一算法,特别是在Microsoft Foundation Classes (MFC)框架下进行操作。MFC是微软为...

    计算机图形学 实现b样条

    计算机图形学是一门涵盖广泛的学科,它涉及到图像的生成、处理和交互,是现代计算机界面设计和技术的基础。在计算机图形学中,B样条(B-Spline)是一种非常重要的数学工具,广泛应用于曲线和曲面的建模。B样条在...

    matlab绘制B样条曲线正算反算.rar_B样条_B样条matlab_B样条反算_B样条曲线_样条

    在MATLAB中,B样条(B-Spline)是一种非常重要的数学工具,广泛应用于计算机图形学、几何建模、工程设计等领域。B样条曲线具有平滑性、局部控制和可调整性等特性,使得它们成为数据拟合和插值的理想选择。本资料主要...

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

    B样条曲线(B-Spline Curves)是另一种重要的曲线表示方法,相比Bezier曲线,B样条曲线有以下优势: 1. **更灵活的控制**:B样条曲线可以使用更多的控制点来创建更复杂的形状,并且控制点可以不在曲线上。 2. **可...

    计算机图形学 B样条

    计算机图形学是信息技术领域的一个重要分支,它主要研究如何用计算机生成、处理和显示图像。在计算机图形学中,B样条(B-Spline)是一种非常重要的数学工具,广泛应用于曲线和曲面的构造,特别是在3D建模、动画、CAD...

    计算机图形学MATLAB版的B样条曲线

    在这个主题中,我们聚焦于MATLAB实现的B样条曲线。 B样条(B-Spline)曲线是一种在计算机图形学中广泛应用的非均匀有理B样条(NURBS)的基础部分。它们具有平滑、连续且可调整的特性,使得B样条曲线非常适合用来...

    JAVA B样条曲线 可鼠标操作 计算机图形学

    在游戏开发中,角色的运动轨迹或环境的地形可以借助B样条曲线生成;在动画制作中,它可以用于平滑的角色动画过渡。 **总结** "JAVA B样条曲线 可鼠标操作 计算机图形学"项目提供了一个直观的示例,展示了如何在JAVA...

    B样条曲线 计算机图形学

    在计算机图形学中,B样条曲线是一种非常重要的数学工具,被广泛应用于建模、动画、渲染以及CAD(计算机辅助设计)系统中。本文将深入探讨B样条曲线的概念、性质以及如何用VC++实现。 B样条曲线(B-Spline Curve),...

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

    在计算机图形学中,曲线生成算法是核心内容之一,它用于构建和绘制复杂的形状和模型。本文将深入探讨B样条、参数样条曲线以及贝塞尔曲线这三种常见的曲线生成方法,并结合MFC(Microsoft Foundation Classes)框架...

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

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

    matlab绘制B样条曲面代码.rar_Bspline曲面MATLAB_B样条曲线matlab_B样条曲线曲面_am9i2_b样

    它接受控制点矩阵作为输入,并生成对应的B样条曲线。例如,如果你有一个二维控制点矩阵`P`,你可以这样绘制B样条曲线: ```matlab t = linspace(0, 1, num_points); % 创建参数化变量 [x, y] = bspline(t, P); % ...

    曲线生成算法的C#gdi+实现(贝塞尔曲线、样条曲线、B样条曲线)

    在计算机图形学中,曲线生成算法是至关重要的,它们用于创建平滑、连续的线条,广泛应用于游戏开发、UI设计、3D建模等领域。本文将深入探讨C# GDI+实现的三种常见曲线生成算法:贝塞尔曲线、样条曲线和B样条曲线。 ...

    B样条曲线生成和修改

    总之,B样条曲线生成和修改涉及数学、数据结构和图形编程等多个方面。理解其原理并能在VC++ MFC环境下实现,对于开发图形软件和设计应用是至关重要的。通过不断的实践和优化,我们可以创建出高效、易用的B样条曲线...

    三次B样条曲线. c语言

    三次B样条曲线是一种在计算机图形学中常用的平滑曲线。这种曲线由多个小段三次多项式曲线组成,每段曲线之间的连接点称为控制点。三次B样条曲线能够通过调整这些控制点来改变曲线的整体形状,使得它既平滑又连续。三...

    计算机图形学中 用三次B样条曲线绘制一段平面图案

    三次B样条曲线是一种非常灵活且常用于计算机图形学中的曲线表示方法,特别适合于形状的平滑插值和自由曲线设计。 首先,我们要理解三次B样条曲线的基本概念。B样条(B-spline)是由一组控制点定义的非均匀有理B样条...

    B样条曲线,三次b样条曲线,matlab

    B样条曲线是一种在计算机图形学、几何建模和工程计算中广泛应用的数学工具,它在数据拟合、曲线设计和动画制作等方面有着显著的作用。本文将深入探讨B样条曲线的基本概念,尤其是2次和3次B样条曲线,并通过MATLAB这...

Global site tag (gtag.js) - Google Analytics