计算机图形学实验报告.docx
- 文档编号:28728623
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:200.99KB
计算机图形学实验报告.docx
《计算机图形学实验报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
计算机图形学实验报告
计算机图形学课程设计
实验报告
题目:
用某一个字符填充任意多边形
班级:
090412
姓名:
邓军
学号:
09041220
老师:
王蕾
2012年6月18日
一、实验目的
掌握多边形的绘制和字符生成的算法,并且要求掌握多边形的填充算法,学会用字符代替单种颜色对多边形的填充。
二、实验内容
编写代码生成任意多边形和字符,将生成的字符对多边形进行填充,如下图所示:
三、编程语言和思想
利用visualbasic6.0进行编程
主要功能有多边形的绘制和字符生成及填充,多边形的绘制利用循环方式,给坐标赋值,然后用line将每个坐标用直线依次连接起来,多边形的边数可以根据界面中输入的数值进行确定,字符的生成采用的是矩阵方式,最后的填充利用的是扫描线填充算法,先求交点,再把交点排序,然后用字符填充
四、实验程序
Dimn1AsInteger
DimxmaxAsInteger,xminAsInteger
Dimf
Dimxx(30)AsSingle
Dimyy(30)AsSingle
Dimx(30)AsInteger
Dimy(30)AsInteger
Dimxjd(3000)AsInteger
Dimyjd(3000)AsInteger
DimtAsSingle
DimkAsInteger,hAsInteger
Dimnn(2,2)AsInteger
Dima(20,20)AsInteger
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger
n1=Val(Text3.Text)
'Fori=1Ton1
'x(i)=Val(Text1(i).Text)
'Nexti
x(n1+1)=x
(1)
'Fori=10To18
'y(i-9)=Val(Text1(i).Text)
'Nexti
y(n1+1)=y
(1)
n1=n1+1
'Fori=1Ton1-1
'Picture1.Line(x(i),y(i))-(x(i+1),y(i+1))
'Nexti
nn(0,0)=1:
nn(0,1)=n1
nn(1,0)=n1+1:
nn(1,1)=n1+n2
ymin=500
ymax=0
Forj=0To1
Fori=nn(j,0)Tonn(j,1)
'计算多边形顶点的最大最小值
If(y(i) If(y(i)>ymax)Thenymax=y(i) Nexti Nextj '扫描线循环 Forh=yminToymaxStep8 k=0 '多边形循环 Forj=0To1 '多边形的边循环 Fori=nn(j,0)Tonn(j,1)-1 IfInt(y(i+1))<>Int(y(i))Then If((h+0.5-y(i))*(h+0.5-y(i+1))<0)Then'扫描线h与边有交点 '计算交点 xjd(k)=x(i)+(x(i)-x(i+1))*(h-y(i))/(y(i)-y(i+1)) yjd(k)=h k=k+1 EndIf EndIf Nexti Nextj '交点排序 Fori=0Tok-1 l=i Form=i+1Tok-1 If(xjd(m) Nextm If(l<>i)Then t=yjd(i): yjd(i)=yjd(l): yjd(l)=t t=xjd(i): xjd(i)=xjd(l): xjd(l)=t EndIf Nexti '填充 Fori=0Tok-1Step2 Forj=xjd(i)+4Toxjd(i+1)-2Step9 Callmb(j,yjd(i)) Nextj Nexti Nexth EndSub PrivateSubCommand2_Click() Picture1.Cls EndSub PrivateSubCommand3_Click() End EndSub Functionmb(xAsInteger,yAsInteger)AsInteger Fori=0To8 Forj=0To8 Ifa(i,j)=1ThenPicture1.PSet(x+i-4,y+j-4) Next Next EndFunction PrivateSubCommand4_Click() n1=Val(Text3.Text) Fori=1Ton1 x(i)=Val(Text1(i).Text) Nexti x(n1+1)=x (1) Fori=10To16 y(i-9)=Val(Text1(i).Text) Nexti y(n1+1)=y (1) n1=n1+1 Fori=1Ton1-1 Picture1.Line(x(i),y(i))-(x(i+1),y(i+1)) Nexti EndSub PrivateSubForm_Load() a(0,0)=1: a(0,1)=0: a(0,2)=0: a(0,3)=0: a(0,4)=0: a(0,5)=0: a(0,6)=1: a(0,7)=0: a(1,0)=1: a(1,1)=1: a(1,2)=1: a(1,3)=1: a(1,4)=1: a(1,5)=1: a(1,6)=1: a(1,7)=0: a(2,0)=1: a(2,1)=1: a(2,2)=0: a(2,3)=1: a(2,4)=1: a(2,5)=1: a(2,6)=1: a(2,7)=0: a(3,0)=1: a(3,1)=0: a(3,2)=0: a(3,3)=1: a(3,4)=0: a(3,5)=0: a(3,6)=1: a(3,7)=0: a(4,0)=1: a(4,1)=0: a(4,2)=0: a(4,3)=1: a(4,4)=0: a(4,5)=0: a(4,6)=1: a(4,7)=0: a(5,0)=1: a(5,1)=1: a(5,2)=1: a(5,3)=1: a(5,4)=1: a(5,5)=1: a(5,6)=1: a(5,7)=0: a(6,0)=0: a(6,1)=1: a(6,2)=1: a(6,3)=0: a(6,4)=1: a(6,5)=1: a(6,6)=0: a(6,7)=0: a(7,0)=0: a(7,1)=0: a(7,2)=0: a(7,3)=0: a(7,4)=0: a(7,5)=0: a(7,6)=0: a(7,7)=0: EndSub 五、实验结果 运行程序等题目所示界面 测试实验程序: 1、先在边数框中输入数字“5” 2、点击“生成多边形”按钮,得如下图: 3、然后单击“字符填充”按钮,得下图: 4、改变边数,将值改成“7”重复操作,得下图: 5、测试结束,单击“退出”按钮关闭界面 六、实验总结 通过本次试验了解并掌握了多边形绘制和字符生成的一些方法,也更深刻了解扫描线填充的算法,本来打算用种子法来填充的,都已经做到了用颜色去填充,但是最后不知道怎么样去把单色填充换成字符,让自己明白还有许多需要自己去学习和思考的。 七、参考文献 《计算机图形学》陆玲桂颖李丽华编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告