计算机图形学实验报告Word文件下载.docx

上传人:b****6 文档编号:15836777 上传时间:2022-11-16 格式:DOCX 页数:20 大小:322.03KB
下载 相关 举报
计算机图形学实验报告Word文件下载.docx_第1页
第1页 / 共20页
计算机图形学实验报告Word文件下载.docx_第2页
第2页 / 共20页
计算机图形学实验报告Word文件下载.docx_第3页
第3页 / 共20页
计算机图形学实验报告Word文件下载.docx_第4页
第4页 / 共20页
计算机图形学实验报告Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告Word文件下载.docx

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

计算机图形学实验报告Word文件下载.docx

姓名

李铮

秦文志

李丹

实验时间

2016年4月26日

实验地点

9栋204

实验

名称

实验一、直线的扫描转换

类型

设计型

综合型

创新型

1)理解在显示器上画图与在纸上画图的本质区别;

2)掌握直线的光栅扫描转换过程;

3)掌握不同算法绘制直线的思路和优缺点。

用基本增量算法和Bresenham算法画直线

1)将像素网格表现出来,建立网格坐标系;

2)显示判别式的计算过程和下一点的选择策略;

3)记录生成点的坐标,建议用表的形式;

4)图形生成过程可以重复进行。

DDA代码:

clear

closeall

clc

x1=0;

y1=0;

x2=15;

y2=12;

figure,line([x1,x2],[y1,y2],'

Color'

[001]);

length=abs(x2-x1)+1;

dx=(x2-x1)/length;

dy=(y2-y1)/length;

k=dy/dx;

x=x1;

y=y1;

holdon

fori=1:

length

plot(round(x),floor(y+0.5),'

*r'

x=x+1;

y=y+k;

end

holdoff

Bresenham代码:

dx=x2-x1;

dy=y2-y1;

e=2*dy-dx;

holdon

fori=1:

if(e>

=0)

y=y+1;

e=e-2*dx;

end

x=x+1;

e=e+2*dy;

holdoff

Bresenham法:

教师签名:

年月日

2016年5月3日

实验二、圆弧的扫描转换

1)掌握圆和圆弧的光栅扫描转换过程;

2)掌握不同算法绘制圆弧的技巧和优缺点。

用正负法和Bresenham算法画圆弧

Bresenham算法:

functionbresenham(b)

x=0;

y=b;

d=3-2*b;

theta=0:

0.01*pi:

2*pi;

x1=b*cos(theta)+0;

y1=b*sin(theta)+0;

plot(x1,y1);

holdon

plot(0,0,'

b+'

);

holdon;

whilex<

y

{plot(x,y,'

*'

plot(-x,-y,'

plot(-x,y,'

plot(x,-y,'

}

ifd<

d=d+4*x+6;

else

d=d+4*(x-y)+10;

y=y-1;

if(x==y)

plot(x,y,'

plot(-x,-y,'

holdoff;

正负法:

functionzf(b)

f=0;

whiley>

iff>

f=f-2*y+1;

f=f+2*x+1;

if(y==0)

2016年5月17日

实验三、直线段的裁剪

用Cohen-SutherLand算法和liang_barsky算法进行线段裁剪

1)理解裁剪的相关概念

2)掌握直线段的一般裁剪过程;

3)理解并掌握Cohen-SutherLand算法的编码思想;

4)理解并掌握Liang_Barsky算法的参数化裁剪思想;

2)交互输入剪裁线段和裁剪窗口;

3)对于线段裁剪,线段被窗口的四条边裁剪的过程要显示出来;

4)裁剪过程可以重复进行。

Cohen-SutherLand算法核心代码:

functionLines=Cohen_Sutherland(line,Rectangle)

%编码裁剪算法

%line为线段端点矩阵,共四列,其数据含义如下:

%端点Ax坐标端点Ay坐标端点Bx坐标端点By坐标

%Rectangle为窗口边界值,共四个元素,其含义分别为Xwl,Xwr,Ywb,Ywt。

%

%首先检测参数是否合法

[rowcolumn]=size(line);

ifcolumn<

4||length(Rectangle)<

4

Lines=[];

fprintf('

参数不合法不合法'

return;

%程序中主要变量说明

%code为线段端点的编码矩阵,两行四列,第一行为点P1的编码,第二行为点P2的编码

%四列的含义为:

D0,D1,D2,D3

%依次处理line的各个线段

k=0;

length(line(:

1))

%取出第i条线段

P1=line(i,[1,2]);

P2=line(i,[3,4]);

%计算斜率

PP=P1-P2;

ifPP

(1)==0

k=inf;

else

k=PP

(2)/PP

(1);

finished=false;

while(~finished)

%对点P1和P2进行编码

code=[

P1

(1)<

Rectangle

(1),P1

(1)>

Rectangle

(2),P1

(2)<

Rectangle(3),P1

(2)>

Rectangle(4);

P2

(1)<

Rectangle

(1),P2

(1)>

Rectangle

(2),P2

(2)<

Rectangle(3),P2

(2)>

];

%P1,P2,k,code

%进行简取或简弃的判断

test=code(1,:

)|code(2,:

%判断是否简取

ifisempty(find(test>

0,1))

Lines=[Lines;

[P1,P2]];

finished=true;

%若当前线段处理完成,则退出

iffinished

break;

%判断是否简弃

)&

code(2,:

if~isempty(find(test>

0,1))

%确保P1在窗口之外

ifisempty(find(code(1,:

)>

%交换P1,P2的坐标值和编码

PT=P1;

P1=P2;

P2=PT;

PT=code(1,:

code(1,:

)=code(2,:

)=PT;

%从低位开始找编码值为1的地方

D=find(code(1,:

0,1);

ifD<

=2

%此时P1位于窗口的左边或右边

ifk==0

%若是水平线,则y不变,x变为窗口的左边界或右边界

%且此时k不会等于inf,否则线段处于简弃状态。

P1

(1)=Rectangle(D);

%P1

(2)=Rectangle(find(code(1,[3,4])>

0,1));

%若线段是斜线,则计算y值,x值变为窗口的左边界或右边界

P1=[Rectangle(D),P1

(2)+k*(Rectangle(D)-P1

(1))];

%此时P1位于窗口的上方或下方

ifk==inf

%若线段是竖直线,则x不变,y变为窗口的上边界或下边界

%且此时k不会等于0,否则线段将处于简弃状态。

P1

(2)=Rectangle(D);

%若线段是斜线,则计算x值,y值变为窗口的上边界或下边界。

P1=[P1

(1)+(Rectangle(D)-P1

(2))/k,Rectangle(D)];

%对P1和P2重新编码,再次计算。

%pause(10);

%scanf(D,'

%d'

%inputdlg('

'

%对最终点进行取整运算

%Lines=round(Lines);

Cohen-SutherLand算法:

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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