计算机图形学曲线的生成.docx
- 文档编号:7261007
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:8
- 大小:303.50KB
计算机图形学曲线的生成.docx
《计算机图形学曲线的生成.docx》由会员分享,可在线阅读,更多相关《计算机图形学曲线的生成.docx(8页珍藏版)》请在冰豆网上搜索。
计算机图形学曲线的生成
实验报告
(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;i<4;i++)
{
pdc->LineTo(cp[i]);
}
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCquxian:
:
OnCancel()
{
//TODO:
Addextracleanuphere
CDialog:
:
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;i<4;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:
Addextracleanuphere
CDialog:
:
OnCancel();
}
(1)编辑对话框截图:
(2)实验内容2结果如下:
四、存在问题及解决方法
实验过程中遇到的问题大致如下:
每次试验都必须重新做,通过老师说加一个菜单就行终于知道了,可以在以前做的实验上做,简便了很多。
有的代码不会编写只能跟着网上别人的编写的代码编写.在不能运行时,经常是没有定义一些程序名,通过定以后得到解决。
评语:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 曲线 生成