湖北汽车工业学院实验报告班级学号姓名课程名称完成日期实验四实现Bezier曲线的生成算法一、实验目的1、熟悉CDC图形程序库;2、掌握Bezier曲线的生成算法;3、掌握利用Bezier曲线生成复杂形状的曲线;二、实验性质验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、能够根据实验指导书的要求,完成相关的内容;四、实验内容(一)生成绘图应用程序的框架(如下图)具体实现见第一次实验,过程不再详细说明。(二)在应用程序中增加菜单完成相关菜单的设计,具体的效果如下图所示,并设置好相关菜单消息的映射,具体的实现在前面的实验中介绍过,再此不在详细说明。(三)在应用程序中增加一个参数设置的对话框在VC++6.0环境中打开资源视图,插入两个对话框,如图所示(具体实现过程见实验二):(四)在绘图函数中添加代码通过以上步骤,得到了与菜单对应的消息映射,就可以在函数中添加代码绘制图形了。1、利用Bezier曲线的生成算法实现二次Bezier曲线的生成(算法的详细原理见教材)。voidCBezierView::OnBezier2(){//TODO:AddyourcommandhandlercodehereInputBezier2InfoDlg;Dlg.DoModal();CDC*pDC=GetDC();//得到绘图类指针RedrawWindow();//重绘窗口CPenbluepen(PS_SOLID,2,RGB(0,0,255));//创建画实线、线宽为2的蓝色画笔CPen*old=pDC-SelectObject(&bluepen);floatx0,y0,x1,y1,x2,y2;floati,x,y,dt,t,n=30.0;x0=Dlg.p0_x;y0=Dlg.p0_y;x1=Dlg.p1_x;y1=Dlg.p1_y;x2=Dlg.p2_x;y2=Dlg.p2_y;dt=1/n;for(i=0;i=n;i++){t=i*dt;x=x0*(1-t)*(1-t)+x1*2*t*(1-t)+x2*t*t;y=y0*(1-t)*(1-t)+y1*2*t*(1-t)+y2*t*t;if(i==0)pDC-MoveTo(x,y);pDC-LineTo(x,y);}pDC-MoveTo(x0,y0);pDC-LineTo(x1,y1);pDC-LineTo(x2,y2);pDC-SelectObject(old);ReleaseDC(pDC);}运行效果如下:2、利用Bezier曲线的生成算法实现三次Bezier曲线的生成(算法的详细原理见教材)。。voidCBezierView::OnBezier3(){//TODO:AddyourcommandhandlercodehereInputBezier3InfoDlg1;Dlg1.DoModal();CDC*pDC=GetDC();//得到绘图类指针RedrawWindow();//重绘窗口CPenredpen(PS_SOLID,2,RGB(255,0,0));//创建画实线、线宽为2的红色画笔CPen*old=pDC-SelectObject(&redpen);floatx0,y0,x1,y1,x2,y2,x3,y3;floati,x,y,dt,t,n=30.0;x0=Dlg1.p0_x;y0=Dlg1.p0_y;x1=Dlg1.p1_x;y1=Dlg1.p1_y;x2=Dlg1.p2_x;y2=Dlg1.p2_y;x3=Dlg1.p3_x;y3=Dlg1.p3_y;dt=1/n;for(i=0;i=n;i++){t=i*dt;x=x0*(1-t)*(1-t)*(1-t)+x1*3*t*(1-t)*(1-t)+x2*3*t*t*(1-t)+x3*t*t*t;y=y0*(1-t)*(1-t)*(1-t)+y1*3*t*(1-t)*(1-t)+y2*3*t*t*(1-t)+y3*t*t*t;if(i==0)pDC-MoveTo(x,y);pDC-LineTo(x,y);}pDC-MoveTo(x0,y0);pDC-LineTo(x1,y1);pDC-LineTo(x2,y2);pDC-LineTo(x3,y3);pDC-SelectObject(old);ReleaseDC(pDC);}运行效果如下:3、以上是本次实验的基本部分,能不能利用该算法,完成任意阶次Bezier曲线的生成,请同学们认真考虑,完成这部分的内容,并将具体的实现过程撰写在实验报告上。五、思考1、如何实现任意阶次Bezier曲线的生成;2、如何利用Bezier曲线来实现任意复杂形状曲线的生成。六、实验总结