计算机图形学实验报告材料75781.docx

上传人:b****8 文档编号:11027865 上传时间:2023-02-24 格式:DOCX 页数:17 大小:172.52KB
下载 相关 举报
计算机图形学实验报告材料75781.docx_第1页
第1页 / 共17页
计算机图形学实验报告材料75781.docx_第2页
第2页 / 共17页
计算机图形学实验报告材料75781.docx_第3页
第3页 / 共17页
计算机图形学实验报告材料75781.docx_第4页
第4页 / 共17页
计算机图形学实验报告材料75781.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告材料75781.docx

《计算机图形学实验报告材料75781.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告材料75781.docx(17页珍藏版)》请在冰豆网上搜索。

计算机图形学实验报告材料75781.docx

计算机图形学实验报告材料75781

计算机图形学

实验报告

 

姓名:

谢云飞

学号:

20112497

班级:

计算机科学与技术11-2班

实验地点:

逸夫楼507

实验时间:

2014.03

实验1直线的生成

1实验目的和要求

理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力;

编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。

2实验环境和工具

开发环境:

VisualC++6.0

实验平台:

Experiment_Frame_One(自制平台)。

本实验提供名为Experiment_Frame_One的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham算法,并进行分析。

⏹平台界面:

如图21所示

⏹设置:

通过view->setting菜单进入,如图22所示

⏹输入:

通过view->input…菜单进入.如图23所示

⏹实现算法:

◆DDA算法:

voidCExperiment_Frame_OneView:

:

DDA(intX0,intY0,intX1,intY1)

Mid_Bresenham法:

voidCExperiment_Frame_OneView:

:

Mid_Bresenham(intX0,intY0,intX1,intY1)

 

3实验结果

3.1程序流程图

1)DDA算法流程图:

开始

定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增量xIncre,y增量yIncre

输入两点坐标x1,y1,x0,y0

dx=x1-x0,dy=y1-y0;

_________↓_________

↓↓

若|dx|>|dy|反之

epsl=|dx|epsl=|dy|

↓________...________↓

xIncre=dx/epsl;yIncre=dy/epsl

填充(强制整形)(x+0.5,y+0.5);

↓←←←←

横坐标x+xIncre;

纵坐标y+yIncre;

↓↑

若k<=epsl→→→k++

结束

2)Mid_Bresenham算法流程图开始

定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y

输入x0,y0,x1,y1

______↓______

↓↓

若x0>x1反之

x=x1;x1=x0;x0=x;x=x0;

Y=y1;y1=y0;y0=y;y=y0;

↓______..______↓

坐标差dx=x1-x0;dy=y1-y0;

判断值d=dx-2*dy;

UpIncre=2*dx-2*dy;DownIncre=-2*dy;

填充点(x,y),且x=x+1;

______↓______←←←

↓↓↑

若d<0反之

y=y+1,且d=d+UpIncred=d+DownIncre

↓______.______↓↑↑

若x<=x1→→→↑

结束

3.2程序代码

voidCExperiment_Frame_OneView:

:

DDA(intX0,intY0,intX1,intY1)

{

//----------请实现DDA算法------------//

intdx,dy,epsl,k;

floatx,y,xIncre,yIncre;

dx=X1-X0;dy=Y1-X0;

x=X0;y=Y0;

if(abs(dx)>abs(dy))epsl=abs(dx);

elseepsl=abs(dy);

xIncre=(float)dx/(float)epsl;

yIncre=(float)dy/(float)epsl;

for(k=0;k<=epsl;k++){

DrawPixel((int)(x+0.5),(int)(y+0.5));

x+=xIncre;

y+=yIncre;

}

}

voidCExperiment_Frame_OneView:

:

Mid_Bresenham(intX0,intY0,intX1,intY1)

{

//-------请实现Mid_Bresenham算法-------//

intdx,dy,d,UpIncre,DownIncre,x,y,xend;

if(X0>X1){

x=X1;X1=X0;X0=x;

y=Y1;Y1=Y0;Y0=y;

}

x=X0;y=Y0;

dx=X1-X0;dy=Y1-Y0;

d=dx-2*dy;

UpIncre=2*dx-2*dy;

DownIncre=-2*dy;

while(x

DrawPixel(x,y);

x++;

if(d<0){

y++;

d+=UpIncre;

}

elsed+=DownIncre;

}

}

3.3运行结果

3.4运行结果分析

DDA算法基本上没有什么问题,Mid_Bresenham算法在网格尺寸比较大时误差较大,通过改变网格尺寸大小即能较为精确地描绘出所绘直线。

总之在误差允许的范围类,实验结果令人满意。

4思考题(可选)

如何测试比较算法的性能?

⏹提示1:

因为绘制1条直线时间很短,所以需要绘制大量直线才能比较它们之间的性能;

⏹提示2:

drawpixel需要耗费时间,但它的时间性能和直线绘制算法无关,因此在比较不同算法性能时,应该屏蔽它的影响,如何屏蔽?

5实验心得

通过此次实验,我对典型的直线绘制算法DDA算法、Bresenham中点算法有了进一步的了解与掌握。

由于第一次做图形学的相关实验,陌生感还是有的,对平台也不太掌握,所以一开始很难入门,但在老师的帮助和同学的相互讨论下,结果还是可观的。

两个基本算法都得以实现。

希望随着学习的加深,后续的实验能够做的更好。

实验2多边形扫描转换算法

1实验目的和要求

理解多边形扫描转换的原理;掌握典型多边形扫描转换算法;掌握步处理、分析实验数据的能力;

编程实现基本X-扫描线转换算法(必做);

编程实现有效边表转换算法(选做)。

2实验环境和工具

本试验提供自带实验平台

开发环境:

VisualC++6.0

本实验提供名为Polygon_Conversion的平台,该平台提供基本绘制、设置、输入功能,学生在此基础上实现X-扫描线算法和有效边表转换算法。

多边形输入:

⏹用户按【功能】【输入多边形……】菜单开始输入多边形;

⏹单击鼠标左键输入多边形顶点;

⏹点击鼠标右键结束多边形输入,并将最后一个顶点和第一个顶点进行连接;

●参数设置:

⏹用户按“【功能】【设置……】”启动设置对话框

⏹设置内容:

◆填充色

◆是否填充多边形

◆选择转换算法

⏹实现扫描转换算法

◆X-扫描线转换算法:

voidCPolygon_ConversionView:

:

X_Scan_Line_Conersion

(intVertices[][2],intVertexNum)

◆有效边表转换算法:

voidCPolygon_ConversionView:

:

Active_Edge_Table_Conersion

(intVertices[][2],intVertexNum)

3实验结果

3.1程序流程图

X-扫描线转换算法:

开始

(若构点小于3个→结束)

确定多边形所占有的最大扫描线,

得到多边形顶点的最小和最大y值(ymin和ymax)

从ys=ymin开始扫描,且计算每条边的方程式

↓↓←←

记录ys与多边形各边交点↑

(判断并取舍交点:

顶点的两条边的另外两个端点的y1,y2的值比ys大的个数为0,1,2,

则取交点对应个数为0,1,2;)

取完交点横坐标后排序交点横坐标x数组,

并配对(1,2)(3,4)…↑↑

填充配对区间

若扫描线ys<=ymax→→↑

(结束)

3.2程序代码

voidCPolygon_ConversionView:

:

X_Scan_Line_Conersion(intVertices[][2],intVertexNum)

{

intymin,ymax,x[10],i,j,n=0,x1,x2,y1,y2,x0,ys;

ymax=0xffffffff;

ymin=0x7fffffff;

if(VertexNum<=3)

return;

for(i=0;i

{

if(Vertices[i][1]

ymin=Vertices[i][1];

if(Vertices[i][1]>ymax)

ymax=Vertices[i][1];

}

for(ys=ymin;ys<=ymax;ys++)

{

n=0;

for(j=0;j

{

x1=Vertices[j][0];

y1=Vertices[j][1];

x2=Vertices[(j+1)%VertexNum][0];

y2=Vertices[(j+1)%VertexNum][1];

if(y1==y2)

{

continue;

}

if(ysmax(y1,y2))

continue;

x0=int((ys-y1)*(x2-x1)/(y2-y1)+x1+0.5);

if(ys==y1)

continue;

if(ys==y2)

{

inttmp=0;

if(y1>ys)

++tmp;

if(Vertices[(j+2)%VertexNum][1]>ys)

++tmp;

if(tmp%2==0)

continue;

}

x[n]=x0;

n++;

}

sort(x,x+n);//排序

for(i=0;i

{

for(j=x[i];j<=x[i+1];++j)

DrawPixel(j,ys);

}

}

return;

}

3.3运行结果

3.4运行结果分析

X扫描线算法填充算法中比较简单的算法。

它通过求交、排序、交点配对、区间填色的过程一次处理每一条扫描线。

而且对于端点独立进行判断(当做一个或者两个),很好的实现了填充效果。

4思考题(可选)

5实验心得

通过此次实验,我对X-扫描线转换算法和有效边表转换算法都有了一定的了解,并能在指导下完成相应的函数的编写。

另一方面,我的数据分析和处理能力也得到了一定的提升。

正可谓收获匪浅。

实验3BSpline曲线绘制

1实验目的和要求

●理解掌握自由曲线生成的基本原理和方法;编程实现三次B样条曲线:

●均匀周期性B样条曲线

●开放均匀B样条曲线

2实验环境和工具

本试验提供自带实验平台

●开发环境:

VisualC++6.0

●实验平台:

Polygon_Conversion(自制平台)

3实验结果

3.1程序流程图

1)基函数的生成:

floatCFreeform_CurveView:

:

BKM(floatt,intk,intm,floatnodes[])

{

floatvalue;

if(m==1)

{

if(t>=nodes[k]&&t

value=1;

else

value=0;

}

elseif(m>1)

{

value=(Divide((t-nodes[k]),(nodes[k+m-1]-nodes[k]))*BKM(t,k,m-1,nodes)+

Divide((nodes[k+m]-t),(nodes[k+m]-nodes[k+1]))*BKM(t,k+1,m-1,nodes));

}

returnvalue;

}

2)生成曲线的节点矢量:

boolCFreeform_CurveView:

:

Create_Nodes_Vector(intn,

intm,

intSplineType,

floatnodes[])

{

switch(SplineType){

case0:

//均匀B样条曲线

{

//添加代码......................................

for(inti=0;i<=n+m;i++)

nodes[i]=i;

break;

}

case1:

//开放均匀B样条曲线

{

//添加代码.....................................

inti=0;

for(;i

nodes[i]=0;

for(;i<=n;i++)

nodes[i]=i-m+1;

for(;i<=n+3;i++)

nodes[i]=n-m+2;

break;

}

default:

returnfalse;

}

returntrue;

}

3.3运行结果

3.4运行结果分析

这次试验是照着书上的生成曲线的公式编写的,分别绘制出均匀B样条曲线和开放均匀B样条曲线,实现难度不大。

从曲线可以看出,两个曲线都很好的拟合了选择的点,均匀B样条曲线似乎效果更佳。

4实验心得

通过此次实验,我对基本曲线生成算法有了一定的掌握。

由于其本身就很掌握,所以实现起来困难重重。

可能是对三次B样条曲线的理解还不够透彻,希望今后的学习能够让我对其有进一步的了解与把握。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1