图形学大作业_第1页
图形学大作业_第2页
图形学大作业_第3页
图形学大作业_第4页
图形学大作业_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图形学大作业之实验报告吴晓辉2001374424、胡标2001374413、陈少陪2001374403一、作业功能简介本程序实现的功能有:1.三种方法画出直线(DDA, MidBresenham,改进的MidBresenham),中点算法画出圆,以及中点算法画椭圆2.接近无限撤销,前进模式,尽情享受画中的乐趣3.平移功能平滑顺手4.旋转功能360度正旋逆旋顺转逆转任君选择5.删除功能极尽拾取功能,随意删除任意图形6.缩放功能对所画图形进行调整,使所画图像尽善尽美7.打开图片文件功能让君随意挑选所需图片8.对当前图片进行保存,格式可以是任意的(当然打开的时候要 满足条件才行)9.颜色的选择极尽图

2、像的风采,使得世界变得更加华彩亮丽 当然也不缺少清屏功能,在一瞬之间,全屏皆空10.命令行输入使得该软件更加完美可靠当然该软件依然存在着不少的缺陷,功能尚不够完善,需要进一步地完善(如:多项选择,对图形进行裁减)二、本程序运行界面及使用1.画直线、圆、椭圆时,点击相应按钮,然后在画面上点击一点,作为起始点或中心,松开,然后再选择一点,作为终点或者圆的半径或者确定椭圆的长半轴和短半轴2.在已画图形的情况下可以进行撤销和前进功能3.平移功能点击平移按钮,选择所要平移的图形进行平移,点击时在图形的附近,然后平移到所要的位置4.旋转功能点击旋转按钮,选择所要旋转的图形进行旋转,点击图形附近,这时会出现

3、一个圆作为参考圆5.删除功能,同上6.缩放功能,点击缩放按钮,选择缩放图形,鼠标移动时出现缩放提示,如下图所示7.颜色选择,点击颜色,弹出颜色对话框,选择颜色前:后:8.打开对话框9.保存对话框三、程序设计主要原理及部分代码1.画直线、圆、椭圆/DDA算法procedure ddaline(x1,y1,x2,y2:integer;color:Tcolor);var dx,dy,epsl,k,xi,yi:integer; xt,yt,xincre,yincre:single;begin dx:=x2-x1; dy:=y2-y1; xt:=x1; yt:=y1; if abs(dx)abs(dy)

4、 then epsl:=abs(dx) else epsl:=abs(dy); else begin xincre:=dx/epsl; yincre:=dy/epsl; for k:=0 to epsl do begin xi:=round(xt+0.5)+x0; yi:=0-(round(yt+0.5)-y0); xt:=xt+xincre; yt:=yt+yincre; end; end;end;/中点算法及其改进算法基本上按照课本,这里就不重复了/圆和椭圆算法也和课本一样采用了中点算法本程序中直线、圆、椭圆均有自己的数据结构type linerecord=record A:integer

5、;B:integer;C:integer; x1:integer;x2:integer;y1:integer;y2:integer; color:Tcolor; fag:boolean;end; linearray=array1.50of linerecord;type circlerecord=record a:integer;b:integer; r:integer; color:Tcolor; fag:boolean;end; circlearray=array1.50of circlerecord;type ellipserecord=record a:integer; b:integ

6、er; ca:integer;cb:integer; color:Tcolor; fag:boolean;end; ellipsearray=array1.50of ellipserecord;直线采用了直线方程和其起点及终点,圆采用圆的方程,椭圆的椭圆算法2.平移算法首先是拾取技术,先确定了所选点在图形上,我是这样判定的function check_line(A,B,C,x1,y1,x2,y2,x,y:integer):boolean;var judge:boolean;begin judge:=(x1=x)and(x=x2)or(x2=x)and(x-150)and(A*x+B*y+C-1

7、50)and(x-a)*(x-a)+(y-b)*(y-b)-r*r-150)and(round(sqrt(x-ca)*(x-ca)*b*b+(y-cb)*(y-cb)*a*a)-a*b)150);end;然后是对它进行拾取procedure Tform1.pickup(x,y:integer;c1:Tcolor);var i,A,B,C,r,x1,x2,y1,y2,ca,cb:integer; Cl:Tcolor;begin for i:=1 to linecount do begin A:=line_arrayi.A; B:=line_arrayi.B; C:=line_arrayi.C;

8、x1:=line_arrayi.x1; y1:=line_arrayi.y1; x2:=line_arrayi.x2; y2:=line_arrayi.y2; if (check_line(A,B,C,x1,y1,x2,y2,x,y)and(line_arrayi.fag=true) then begin paint_line(x1,y1,x2,y2,not(Cl); paint_line(x1,y1,x2,y2,c1); end; end; for i:=1 to circlecount do begin a:=circle_arrayi.a; b:=circle_arrayi.b; r:=

9、circle_arrayi.r; if check_circle(a,b,r,x,y)and(circle_arrayi.fag=true) then begin midbresenhamcircle(a,b,r,not(Cl); midbresenhamcircle(a,b,r,c1); end; end; for i:=1 to ellipsecount do begin a:=ellipse_arrayi.a; b:=ellipse_arrayi.b; ca:=ellipse_arrayi.ca; cb:=ellipse_arrayi.cb; if check_ellipse(a,b,c

10、a,cb,x,y)and(ellipse_arrayi.fag=true) then begin midbresenhamellipse(ca,cb,a,b,not(Cl); midbresenhamellipse(ca,cb,a,b,c1); end; end;end;最后对其进行平移并保存结果,以便其他操作3.缩放算法缩放算法与平移算法,很相像,主要区别在于(1)直线判定不同,平移在于直线上的任意一点,而缩放只能选择端点(2)圆和椭圆过程不同,平移时确定的是他们的中心,而缩放时确定是他们的半径 或长半轴和短半轴4.旋转算法首先,选择旋转支点即中心,然后选择图形,此时计算其旋转的角度的正余弦,并根据矩阵的变换,得到旋转后的结果旋转角度正余弦的计算方法如下cos1:=(x1-xc)/(sqrt(sqr(x1-xc)+sqr(y1-yc); sin1:=(y1-yc)/(sqrt(sqr(x1-xc)+sqr(y1-yc); cos2:=(x2-xc)/(sqrt(sqr(x2-xc)+sqr(y2-yc); sin2:=(y2-yc)/(sqrt(sqr(x2-xc)+sqr(y2-yc); cos3:=cos2*cos1+sin2*sin1; sin3:=sin2*cos1-cos2*sin1; cos1:=cos3;sin1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论