计算机图形学曲线的生成

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告(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结果如下:四、存在问题及解决方法实验过程中遇到的问题大致如下:每次试验都必须重新做,通过老师说加一个菜单就行终于知道了,可以在以前做的实验上做,简便了很多。有的代码不会编写只能跟着网上别人的编写的代码编写.在不能运行时,经常是没有定义一些程序名,通过定以后得到解决。评语:

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功