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. 结果
分享到:
相关推荐
基于OPENGL的B样条曲线生成算法,运行时可拖动特征点,动态调整画出相应的B样条曲线形状
针对B样条曲线的生成,采用deboor算法根据控制点生成相应的曲线上的坐标值。本资源包含了基函数的计算函数,节点向量的生成函数,一个简单的应用实例。
计算机图形学MFC二次曲线计算机图形学MFC二次曲线计算机图形学MFC二次曲线
本资源包含了Bezier曲线和B样条曲面的代码实现,非常美观,还带了排版规整的实验报告,源代码基于c,下载即可运行,欢迎交流,请勿抄袭
在OpenGL的基础上进行编写,绘制三次B样条曲线,可以通过鼠标设置控制点位置、拖动控制点观察曲线动态变化
B样条 参数样条曲线 贝萨尔曲线。。可以手动输入参数点。。MFC
计算机图形学课程设计题目,使用鼠标边点击边边生成曲线,而且还能实现实现绘制出三次B样条的的切线。
源博客在(含解压码): ... 实验四 Bezier曲线生成 (1)结合示范代码了解曲线生成原理与算法实现,尤其是Bezier曲线; (2)调试、编译、修改示范程序。 (3)尝试实现B样条曲线算法。
计算机图形学中B样条曲线的生成,编译软件为VC++编码
B样条曲线是一种常用的数学曲线插值方法,它通过控制点和节点向量来定义曲线形状。在路径规划中,B样条曲线可以用于生成平滑的路径,以满足机器人、无人...此外,B样条曲线还可以应用于计算机图形学、动画制作等领域。
掌握三次B样条曲线的生成算法,掌握三次B样条曲线与控制折线的几何关系。 实验要求: 要求根据给定的控制点个数,用鼠标输入控制点并绘制控制折线,生成并显示由给定控制折线确定的三次B样条曲线。 实验原理: ...
1、资源内容:基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(完整源码+说明文档+基础教程+数据).rar 2、代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3、适用对象:计算机,电子信息...
8.7.2GLU中的B样条曲线/曲面函数 第9章消隐 9.1深度缓存器算法 9.2区间扫描线算法 9.3深度排序算法 9.4区域细分算法 9.5光线投射算法 9.6BSP树 9.7多边形区域排序算法 9.8OpenGL中的消隐处理 ...
Bezier曲线、B样条曲线;多边形;字符。 多边形填充: 种子填充、边缘填充、扫描线填充。 图形裁剪: 多边形裁剪、Cohen-Sutherland算法、圆裁剪。 图形的几何变换: 平移、对称、旋转、缩放。 三维图形的消隐及...
这些程序中,有不少算法是对书上所讲算法的改进和创新(我们用的是北京大学出版社出版的那本《计算机图形学》),并在实践过程中...Coons曲面、Bezier曲面、B样条曲面等常用曲面的生成算法。并给出一些综合应用的例子。
该算法包含了非均匀d环结构生成的双重控制点,其中d环相似于d度均匀B样条曲线的Lane-Riesenfeld算法中均匀的d环结构。Lane-Riesenfeld算法是由B样条曲线基函数的连续卷积公式直接得出的,而本算法是blossoming方法的...
计算机图形学实验6 常用曲面和曲线的生成算法 包括(三次B样条曲线算法)
资源内容:通过给定的控制点,绘制Bezier曲面 语言:C++ 运行环境:Visual Studio 2013/更高版本
在屏幕上使用鼠标左键绘制数量大于4的任意顶点形成控制多边形,单机鼠标 " "右键绘制三次B样条曲线,同时在控制多边形的每一个特征三角形内用虚线显示三 " "次B样条曲线的几何生成原理。 " "具体要求: " "分析原理,...
请去下面链接下载新版本的源码,新版本源码支持不同图层的旋转平移缩放等。 http://download.csdn.net/source/3459644