实验报告(2013—2014学年第二学期)课程名称:计算机图形学姓名:学院:理学院专业:物理学光通信年级:2012级实验报告2014年5月29日第3·4节综合楼426号室进入实验室时间进入时仪器设备状况离开实验室时间离开时仪器设备状况机器号9:50良好11:30良好32实验项目名称生成曲线一、实验目的掌握Bezier曲线的定义生成算法和离散生成算法二、实验内容1.编写程序,使一个物体沿着一条直线匀速移动。2.编写程序,使一个物体围绕屏幕上一点匀速旋转。(可以课后完成)实验过程:1、知空间四点P0(200.0,200.0,240.0)、P1(230.0,440.0,240.0)、P2(250.0,40.0,240.0)、P3(280.0,280.0,240.0),根据Bezier曲线的定义编程绘制曲线。2、知空间四点P0(200.0,200.0,240.0)、P1(230.0,440.0,240.0)、P2(250.0,40.0,240.0)、P3(280.0,280.0,240.0),根据Bezier曲线的离散生成算法(deCasteljau算法)绘制曲线。三、实验过程(步骤)及结果(源程序)一、实验内容1代码floatBase(inti,intn,floatt){intk,a=1,b=1;for(k=i+1;k=n;k++)a=a*k;for(k=1;k=n-i;k++)b=b*k;floatbh=(float)a/b;for(k=1;k=i;k++)bh=bh*t;for(k=1;k=n-i;k++)bh=bh*(1-t);returnbh;}voidquxian(CDC*pdc,floatx[],floaty[],intn){pdc-MoveTo((int)x[0],(int)y[0]);floatxx=0,yy=0;inti=0;floatbb=0;for(doublet=0.05;t=1.000001;t=t+0.05){xx=0;yy=0;for(i=0;i=n;i++){bb=Base(i,n,t);//基函数xx=xx+(x[i])*bb;yy=yy+(y[i])*bb;}pdc-LineTo((int)xx,(int)yy);}}voidCquxian::OnQuxian(){CDC*pdc=GetDC();CPointcp[4];floatx[]={200,230,250,280};floaty[]={200,440,40,280};CPenpen;pen.CreatePen(PS_SOLID,1,RGB(225,0,255));pdc-SelectObject(&pen);quxian(pdc,x,y,3);//TODO:Addyourcontrolnotificationhandlercodehere}voidCquxian::OnQuxian2(){CDC*pdc=GetDC();CPointcp[4];cp[0].x=200;cp[0].y=200;cp[1].x=230;cp[1].y=440;cp[2].x=250;cp[2].y=40;cp[3].x=280;cp[3].y=280;pdc-MoveTo(cp[0]);for(inti=1;i4;i++){pdc-LineTo(cp[i]);}//TODO:Addyourcontrolnotificationhandlercodehere}voidCquxian::OnCancel(){//TODO:AddextracleanuphereCDialog::OnCancel();}(1)编辑对话框截图:(2)实验内容1结果如下:二、实验内容2代码:voidCline::OnLine(){CDC*pdc=GetDC();CPointcp[4];cp[0].x=200;cp[0].y=200;cp[1].x=230;cp[1].y=440;cp[2].x=250;cp[2].y=40;cp[3].x=280;cp[3].y=280;pdc-MoveTo(cp[0]);for(inti=1;i4;i++){pdc-LineTo(cp[i]);}//TODO:Addyourcontrolnotificationhandlercodehere}voidClineji(CDC*pdc,floatx[],floaty[],constintn){pdc-MoveTo((int)x[0],(int)y[0]);floatxx[4],yy[4];inti=0;floatbb=0;for(doublet=0.05;t=1.000001;t=t+0.05){for(i=0;i=n;i++){xx[i]=x[i];yy[i]=y[i];}for(intk=1;k=n;k++){for(inti=0;i=n-k;i++){xx[i]=(float)(xx[i]*(1-t)+xx[i+1]*t);yy[i]=(float)(yy[i]*(1-t)+yy[i+1]*t);}}pdc-LineTo((int)xx[0],(int)yy[0]);}}voidCline::OnLine2(){CDC*pdc=GetDC();CPointcp[4];floatx[]={200,230,250,280};floaty[]={200,440,40,280};CPenpen;pen.CreatePen(PS_SOLID,1,RGB(255,0,0));pdc-SelectObject(&pen);Clineji(pdc,x,y,3);//TODO:Addyourcontrolnotificationhandlercodehere}voidCline::OnCancel(){//TODO:AddextracleanuphereCDialog::OnCancel();}(1)编辑对话框截图:(2)实验内容2结果如下:四、存在问题及解决方法实验过程中遇到的问题大致如下:每次试验都必须重新做,通过老师说加一个菜单就行终于知道了,可以在以前做的实验上做,简便了很多。有的代码不会编写只能跟着网上别人的编写的代码编写.在不能运行时,经常是没有定义一些程序名,通过定以后得到解决。评语: