资源描述:
《广工图形学实验bezier曲线生成》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机学院计算机科学与技术专业7班学号3109006191姓名刘英双协作者教师评定实验四Bezier曲线生成1、实验目的与要求1.通过实验掌握理解并会自己编程实现二维Bezier曲线的画图;2.实现二维2、3、4阶Bezier曲线的绘制。3.将生成算法以菜单或按钮形式集成到用户界面上。4.坐标参数可以用鼠标或键盘输入。2、实验方案1.实验1:①Bezier曲线定义:给定n+1个控制顶点Pi(i二0~n),则Bezier曲线定义为:P(t)=ZBi,n(t)Piue[0,1]其中:Bi,n(t)称为基函数。Bi,n(t)=Cint
2、i(1-t)n-iCin=n!/(i!*(n-i)!)②Bezie「曲线性质◊端点性质:a)P(0)=P0,P(1)=Pn,即:曲线过二端点。b)P,(0)=n(P1-P0),P,(1)=n(Pn-Pn-1)即:在二端点与控制多边形相切。◊凸包性:Bezier曲线完成落在控制多边形的凸包内。◊对称性:由Pi与Pn・i组成的曲线,位置一致,方向相反。◊包络性:Pn(t)二(1-t)Pn-l(t)+tPn-l(t)2.实验2◊实现了在菜单【曲线】〉生成,弹出一个对话框,要求用户输入Bezier曲线的次数。◊实现了在菜单【曲线】・>计
3、算,去掉点,计算生成Bezierft线的控制点◊在界面中用鼠标左键点击,确定控制点,输入完控制点后,系统自动生成Bezier曲线3、实验结果和数据处理1.实验1实验结果:①实验的代码如下:#include#include#inckide#includeusingnamespacestd;structPoint{intx,y;};Pointpt[4],bz[ll];vectorvpt;boolbDraw;intnlnput;voidCalcB
4、ZPoints(){floata0,al,a2,a3,b0,bl,b2,b3;a0=pt[0].x;al=・3*pt[O].x+3*pt[l].x;a2=3*pt[O].x-6*pt[1].x+3*pt[2].x;a3=-ptfOl.x+3*pt[l].x-3*pt[2].x+pt[3].x;bO=pt[O].y;bl=-3*pt[O].y+3*pt[l].y;b2=3*pt[0].y-6*pt[l].y+3*pl⑵.y;b3=-pt[0].y+3*pt[l].y-3*pt[2].y+pt[3].y;floatt=0;float
5、dt=0.01;for(inti=0;tvpt){glPointSize(2);for(inti=0;i6、oidPolylineGL(Point*pt,intnum){glBegin(GL_LINE_STRIP);for(inti=0;i0){ControlPoint(vpt);}if(bDraw){PolylineGL(pt,4);CaIcBZPoints();PolylineGL
7、(bz,11);}glFlush();}voidInit(){glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);printf("PleaseClickleftbuttonofmousetoinputcontrolpointofBezierCurve!");voidReshape(intw,inth)glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadldentityO;gluO
8、rtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);}voidmouse(intbutton,intstate,intx,inty){switch(button){caseGLUT_LEFT_BUTTON:if(state==GLUT