汇编语言光栅图形变换

合集下载

图形学中的光栅化与三角形填充算法

图形学中的光栅化与三角形填充算法

图形学中的光栅化与三角形填充算法光栅化和三角形填充算法是图形学中常用的技术,用于在计算机图形学中将2D或3D场景转换为最终在屏幕上呈现的图像。

本文将介绍光栅化和三角形填充算法的原理、应用和实现。

一、光栅化算法光栅化算法是指将连续的几何图形转化为离散的像素点的过程。

在计算机图形学中,屏幕被划分为一个个像素点的网格,每个像素点的颜色值由计算机确定。

通过光栅化算法,可以将几何图形的顶点信息转化为像素点的颜色值,从而实现图形的显示。

常用的光栅化算法有扫描线光栅化算法和射线光栅化算法。

1.扫描线光栅化算法扫描线光栅化算法逐行扫描图形,通过判断扫描线与几何图形的交点,确定像素点的颜色值。

这种算法适用于任意形状的几何图形。

在扫描线光栅化算法中,一般需要考虑图形的边界条件、插值计算和像素点的填充等问题。

2.射线光栅化算法射线光栅化算法通过从特定点向几何图形发射射线,并计算射线与几何图形的交点,确定像素点的颜色值。

这种算法适用于封闭的几何图形,如圆、椭圆等。

在射线光栅化算法中,常用的算法有中点画圆算法、Bresenham算法等。

光栅化算法广泛应用于计算机图形学中,用于生成点、线、多边形等几何图形的像素点的颜色值,从而实现图像的显示。

光栅化算法在计算机游戏、计算机辅助设计等领域有着广泛的应用。

二、三角形填充算法三角形填充算法是指将一个给定的三角形填充为实心或渐变颜色的过程。

在计算机图形学中,三角形是最基本的几何图形,通过三角形填充算法可以实现更复杂图形的显示和渲染。

常用的三角形填充算法有扫描线填充算法和边缘填充算法。

1.扫描线填充算法扫描线填充算法是通过遍历三角形内的每一行像素点,并判断像素点是否在三角形内部,从而确定像素点的颜色值。

该算法简单直观,但对于复杂的三角形可能效率较低。

2.边缘填充算法边缘填充算法是通过扫描三角形的边缘,并根据每个像素点的位置关系确定颜色值。

常用的边缘填充算法有中点边缘填充算法、贝塞尔曲线填充算法等。

gis将像素光栅化为多边形的方法

gis将像素光栅化为多边形的方法

GIS中,将像素光栅化为多边形的方法通常涉及以下步骤:
1. 图像预处理:首先,需要对原始图像进行一些预处理,如去噪、增强等,以提高后续处理的准确性。

2. 确定阈值:这是光栅化过程中非常重要的一步,因为它决定了如何将像素转换为多边形。

例如,如果阈值设置为3,那么所有相邻且距离小于或等于3个像素的像素都将被视为一个多边形的边缘。

3. 像素连接:根据阈值,系统会尝试将相邻的像素连接起来,形成多边形的边缘。

4. 边界跟踪:在这一步中,系统会沿着多边形的边缘跟踪每个像素,从而形成完整的多边形。

5. 填充多边形:最后,系统会填充多边形内部的所有像素,从而得到最终的光栅化多边形。

这种方法的关键在于阈值的选取。

阈值过小可能导致生成的图像过于复杂,而阈值过大则可能导致图像失真或丢失重要信息。

此外,为了提高准确性,可能还需要进行迭代处理或引入其他复杂的算法。

以上信息仅供参考,如需更多关于光栅化处理的细节和技巧,建议咨询GIS领域的专家或查阅相关学术文献。

计算机图形学——多边形的扫描转换(基本光栅图形算法)

计算机图形学——多边形的扫描转换(基本光栅图形算法)

计算机图形学——多边形的扫描转换(基本光栅图形算法)⼀、多边形扫描转换在光栅图形中,区域是由【相连的】像素组成的集合,这些像素具有【相同的】属性值或者它们位于某边界线的内部1、光栅图形的⼀个基本问题是把多边形的顶点表⽰转换为点阵表⽰。

这种转换成为多边形的扫描转换。

2、多边形的扫描转换与区域填充问题是怎样在离散的像素集上表⽰⼀个连续的⼆维图形。

3、多边形有两种重要的表⽰⽅法:(1)顶点表⽰:⽤多边形的定点序列来表⽰多边形优点:直观、⼏何意义强、占内存少、易于进⾏⼏何变换缺点:没有明确指出那些象素在多边形内,故不能直接⽤于上⾊(2)点阵表⽰:是⽤位于多边形内的象素集合来刻画多边形缺点:丢失了许多⼏何信息(eg:边界、顶点等)但是【点阵表⽰是光栅显⽰系统显⽰时所需的表现形式。

】多边形的扫描转换就是把多边形的顶点表⽰转换为点阵表⽰,即从多边形的给定边界出发,求出位于其内部的各个像素,并将帧缓冲器内的各个对应元素设置相应的灰度或颜⾊。

实际上就是多边形内的区域的着⾊过程。

4、多边形分类⼆、X扫描线算法X扫描线算法填充多边形的基本思想是按扫描线顺序,计算扫描线与多边形的相交区间,再⽤要求的颜⾊显⽰这些区间的象素,即完成填充⼯作。

区间的端点可以通过计算扫描线与多边形边界线的交点获得。

如扫描线y=3与多边形的边界相交于4点(2,3)、(4,3)、(7,3)、(9,3)这四个点定义了扫描线从x=2到x=4,从x=7到x=9两个落在多边形内的区间,该区间内像素应取填充⾊。

算法的核⼼是按x递增顺序排列交点的x坐标序列。

由此可得到扫描线算法步骤如下:算法步骤:1.确定多边形所占有的最⼤扫描线数,得到多边形定点的最⼩最⼤值(y min和y max);2.从y min到ymax每次⽤⼀条扫描线进⾏填充;3.对⼀条扫描线填充的过程分为四个步骤:a)求交点;b)把所有交点按递增顺序排序;c)交点配对(第⼀个和第⼆个,第三个和第四个);d)区间填⾊。

计算机图形学_ 光栅图形学算法(一)_24 多边形扫描转换X扫描线算法_

计算机图形学_ 光栅图形学算法(一)_24 多边形扫描转换X扫描线算法_

x
d、区间填色:把这些相交区间内的 像素置成不同于背景色的填充色
当扫描线与多边形顶点相交时,交点的取舍问题(交点的个数 应保证为偶数个)
y 12 11 10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 101112 x
解决方案:
y
(1)若共享顶点的两条边分别落
12 11
x
算法的核心是按X递增顺序
排列交点的X坐标序列。由 y P7
此,可得到X-扫描线算法步
12 11
骤如下:
10 9
P6
P5
8
(3)对一条扫描线填充的过
7 6
P1
P3
5
程可分为四个步骤:
4 3
2
a、求交:计算扫描线与多边
1
1 2P23 4 5 6 7 8P4 9 101112 x
形各边的交点
b、排序:把所有交点按递增 顺序进行排序
任意两顶点间的连线均在多边形内
(2)凹多边形 任意两顶点间的连线有不在在多边形内
(3)含内环的多边形 多边形内包含多边形
现在的问题是,知道多边形的边界,如何找到多边形内部 的点,即把多边形内部填上颜色
P2
P3
P4
P1 P6
P5
顶点表示
点阵表示
1、X-扫描线算法
X-扫描线算法填充多边形的基本思想是按扫描线顺序,计算 扫描线与多边形的相交区间,再用要求的颜色显示这些区间 的像素,即完成填充工作
区间的端点可以通过计算扫 描线与多边形边界线的交点 获得
扫描线
交点 交点
交点
交点
如扫描线y=3与多边形的边界相 y
交于4点:
11

计算机图形学——圆的扫描转换(基本光栅图形算法)

计算机图形学——圆的扫描转换(基本光栅图形算法)

计算机图形学——圆的扫描转换(基本光栅图形算法)与直线的⽣成类似,圆弧⽣成算法的好坏直接影响到绘图的效率。

本篇博客将讨论圆弧⽣成的3个主要算法,正负法、Bresenham 法和圆的多边形迫近法,在介绍算法时,只考虑圆⼼在原点,半径为R的情况。

⼀、正负法1、基本原理假设已选取Pi-1为第i-1个像素,则如果Pi-1在圆内,就要向圆外⽅向⾛⼀步;若已在圆外就要向圆内⾛⼀步。

总之,尽量贴近圆的轮廓线。

2、正负法的具体实现1)圆的表⽰:设圆的圆⼼为(0,0),半径为R,则圆的⽅程为:F(x,y)=x2+y2–R2=0当点(x,y)在圆内时,F(x,y)<0。

当点(x,y)在圆外时,F(x,y)>0。

2)实现步骤第1步:x0=0,y0=R第2步:求得Pi(x i,y i)后找点P i+1的原则为:当P i在圆内时(F(xi,yi)≤0),要向右⾛⼀步得P i+1,这是向圆外⽅向⾛去。

取x i+1= x i+1, y i+1= y i当P i在圆外时(F(xi,yi)>0),要向下⾛⼀步得P i+1,这是向圆内⽅向⾛去,取x i+1= x i, y i+1= y i-1⽤来表⽰圆弧的点均在圆弧附近且 F(xi, yi)时正时负假设已经得到点(x i, y i),则容易算出F(x i, y i),即确定了下⼀个点(x i+1, y i+1),则如何计算F(x i+1, y i+1),以确定下下个点(x i+2, y i+2)?分为两种情况:右⾛⼀步后:x i+1=x i+1,y i+1=y i,此时:F(x i+1, y i+1)=x i+12+y i2-R2=x i2+y i2-R2+2x i+1 = F(x i, y i)+2x i+1下⾛⼀步后:x i+1=x i,y i+1=y i-1, 此时:F(x i+1, y i+1)=x i2+(y i-1)2-R2= F(x i, y i)-2y i+1由此可得:确定了F(xi+1, yi+1)之后,即可决定下⼀个点(xi+2, yi+2),选择道理同上。

计算机图形学——区域填充算法(基本光栅图形算法)

计算机图形学——区域填充算法(基本光栅图形算法)

计算机图形学——区域填充算法(基本光栅图形算法)⼀、区域填充概念区域:指已经表⽰成点阵形式的填充图形,是象素的集合。

区域填充:将区域内的⼀点(常称【种⼦点】)赋予给定颜⾊,然后将这种颜⾊扩展到整个区域内的过程。

区域填充算法要求区域是连通的,因为只有在连通区域中,才可能将种⼦点的颜⾊扩展到区域内的其它点。

1、区域有两种表⽰形式1)内点表⽰:枚举出区域内部的所有象素,内部所有象素着同⼀个颜⾊,边界像素着与内部象素不同的颜⾊。

2)边界表⽰:枚举出区域外部的所有象素,边界上的所有象素着同⼀个颜⾊,内部像素着与边界象素不同的颜⾊。

21)四向连通区域:从区域上⼀点出发可通过【上、下、左、右】四个⽅向移动的组合,在不越出区域的前提下,到达区域内的任意象素。

2)⼋向连通区域:从区域上⼀点出发可通过【上、下、左、右、左上、右上、左下、右下】⼋个⽅向移动的组合,在不越出区域的前提下,到达区域内的任意象素。

⼆、简单种⼦填充算法给定区域G⼀种⼦点(x, y),⾸先判断该点是否是区域内的⼀点,如果是,则将该点填充为新的颜⾊,然后将该点周围的四个点(四连通)或⼋个点(⼋连通)作为新的种⼦点进⾏同样的处理,通过这种扩散完成对整个区域的填充。

这⾥给出⼀个四连通的种⼦填充算法(区域填充递归算法),使⽤【栈结构】来实现原理算法原理如下:种⼦像素⼊栈,当【栈⾮空】时重复如下三步:这⾥给出⼋连通的种⼦填充算法的代码:void flood_fill_8(int[] pixels, int x, int y, int old_color, int new_color){if(x<w&&x>0&&y<h&&y>0){if (pixels[y*w+x]==old_color){pixels[y*w+x]== new_color);flood_fill_8(pixels, x,y+1,old_color,new_color);flood_fill_8(pixels, x,y-1,old_color,new_color);flood_fill_8(pixels, x-1,y,old_color,new_color);flood_fill_8(pixels, x+1,y,old_color,new_color);flood_fill_8(pixels, x+1,y+1,old_color,new_color);flood_fill_8(pixels, x+1,y-1,old_color,new_color);flood_fill_8(pixels, x-1,y+1,old_color,new_color);flood_fill_8(pixels, x-1,y-1,old_color,new_color);}}}简单种⼦填充算法的不⾜a)有些像素会多次⼊栈,降低算法效率,栈结构占空间b)递归执⾏,算法简单,但效率不⾼,区域内每⼀像素都要进/出栈,费时费内存c)改进算法,减少递归次数,提⾼效率三、扫描线种⼦填充算法基本思想从给定的种⼦点开始,填充当前扫描线上种⼦点所在的⼀区段,然后确定与这⼀段相邻的上下两条扫描线上位于区域内的区段(需要填充的区间),从这些区间上各取⼀个种⼦点依次把它们存起来,作为下次填充的种⼦点。

汇编程序 编成的常用图形

DISPC1 MA CRO C1,C2 ;置光标操作MOV AH,2MOV BH,0MOV DH,C1MOV DL,C2INT 10HENDMDISPC2 MACRO ; 设置显示格式MOV AH,0MOV AL,12HINT 10HENDMDISPC3 MACRO ; 置调色板MOV AH,0BHMOV BH,0MOV BL,11INT 10HENDMDISPC6 MACRO C7,C8MOV AH,0CH ;写像素MOV AL,1MOV DX,C7MOV CX,C8INT 10HENDMDISPC5 MACRO C5 ;显示一个字符MOV DL,C5MOV AH,2INT 21HENDMDISPC4 MACRO ;接受一个字符并回显MOV AH,1INT 21HENDMDATA SEGMENTX DB 50 DUP (?)Y DB 50 DUP (?),'$'DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS,AXMOV CX,10 ;显示长方形第一边 DISPC2DISPC6 1,10DISPC1 1,2L1: DISPC5 '*'DISPC5 20HLOOP L1DISPC5 8DISPC5 8MOV CX,9L2: DISPC5 0AHDISPC5 '*' ;显示长方形第二边DISPC5 8LOOP L2MOV CX,8DISPC5 8DISPC5 '*'L3: DISPC5 8DISPC5 8DISPC5 8DISPC5 '*' ;显示长方形第三边LOOP L3DISPC1 1,3MOV CX,9L4: DISPC5 0AHDISPC5 8DISPC5 '*' ;显示长方形第四边LOOP L4DISPC1 1,25MOV CX,10DISPC5 8L5: DISPC5 '*' ;显示正方形第一边 DISPC5 20HLOOP L5DISPC5 8DISPC5 8MOV CX,5 ;显示正方形二边L6: DISPC5 0AHDISPC5 '*'DISPC5 8LOOP L6MOV CX,8DISPC5 8DISPC5 '*'L7: DISPC5 8DISPC5 8DISPC5 '*'LOOP L7DISPC1 1,25MOV CX,5 ;显示正方形第四边 L8: DISPC5 0AHDISPC5 8DISPC5 '*'LOOP L8DISPC1 1,45MOV CX,9 ;显示斜边L9: DISPC5 '*'DISPC5 0AHLOOP L9DISPC5 '*'MOV CX,5DISPC5 8DISPC5 8L10: DISPC5 '*'DISPC5 8DISPC5 8DISPC5 8LOOP L10DISPC1 1,45MOV CX,10L11: DISPC5 '*'DISPC5 0AHDISPC5 8LOOP L11DISPC1 15,0MOV BX,6 ; 显示实正方形L13: MOV CX,10L12: DISPC5 '*'LOOP L12DISPC5 0AHDISPC5 0DHDEC BXCMP BX,0JNZ L13DISPC1 15,12 ;显示实长方形MOV DH,15MOV BX,4L15: MOV CX,10LOOP L14INC DHDISPC1 DH,12DEC BXCMP BX,0JNZ L15MOV DH,15 ;显示实心三角形 MOV BL,5MOV SI,1DISPC1 15,25MOV CX,1L16: DISPC5 '*'LOOP L16INC SIMOV CX,SIINC DHDEC BLDISPC1 DH,25CMP BL,0JNZ L16MOV AH,7INT 21HMOV AH,4CHINT 21HCODE ENDSEND START。

春秋华师计算机图形学在线作业

华师《计算机图形学》在线作业一、单选题(共30道试卷,共60分。

)1.设在存储器中、用于存放调用程序的现场及参数的存储区是()A.堆栈B.缓冲区C.数据区D.程序区正确答案:2.在面片的数量非常大的情况下哪一个消隐算法速度最快—。

A.深度缓存算法B.扫描线消隐算法C.深度排序算法正确答案:3.光笔是一种—设备。

A.输出B.输入C.输入输出D.非输入也非输出正确答案:4.关于光栅扫描式图形显示器,具有这样的特点()A.桢缓存和光栅显示器均是数字设备B.不需要足够的位面和桢缓存才能反映图形的颜色和灰度C.对于彩色光栅显示器的R.G,B三原色需要三个位面的桢缓存和三个个电子枪D.对原色配置颜色查找颜色查找表的目的是为了提高显示的速度;正确答案:5.下列有关平面几何投影的叙述语句中,正确的论述为—。

A.在平面几何投影中,若投影中心移到距离投影面无穷远处,则成为平行投影B.透视投影与平行投影相比,视觉效果更有真实感,而且能真实地反映物体的精确的尺寸和形状C.透视投影变换中,一组平行线投影在与之平行的投影面上,可以产生灭点D.在三维空间中的物体进行透视投影变换,可能产生三个或者更多的主灭点正确答案:6.计算机图形显示器一般使用什么颜色模型?A.RGBB.CMYC.HSVD.HLS正确答案:7.计算机内存编址的基本单位是—。

A.位8.字C.字节D.兆正确答案:8.种子填充算法中,正确的叙述是—。

A.它是按扫描线的顺序进行象素点的填充B.四连接算法可以填充八连接区域C.八连接算法不能填充四连通区域D.四连接区域内的每一象素可以通过上下左右四个方向组合到达正确答案:9.在Hall光透射模型中作了哪些假设?(1)假设光源在无穷远处;(2)假设视点在无穷远处。

()A.仅(1)B.仅⑵C. (1)和(2)D,都没有。

正确答案:10.把汇编语言源程序转换为目标程序,要经过下列哪一个过程()A.连接B.编辑C.编译D.汇编正确答案:11.下列有关平面几何投影的叙述,错误的是—。

emu8086 汇编语言图形绘制

微机接口报告
汇编语言图形绘制
题目要求:
微机接口图形绘制,实现下面的目标
1、将screen设置为图形显示模式;
2、程序开始提示绘制:直线、矩形还是三角形;
3、根据2的选择,进一步通过键盘输入直线、矩形或三角形的参数(即直线端点或▲、■的各个顶点坐标);
4、步骤3要求的图形绘制结束以后,再进入第2步。
提示:
call get_string
ret
DrawRect endp
ShowTip proc
mov al, 13h
mov ah, 0
int 10h
jmp ShowTipBeg
tip0 db "please choose the shapeto draw:",0ah,0dh,'$'
tip1 db "1 draw line",0ah, 0dh,'$'
call scan_num
mov [bx+si+4],cx
sub cx,[bx+si+2]
ret
DrawLine endp
DrawRect proc
print 0ah,0dh
print "you want to draw rect!"
print 0ah,0dh
print"pleaseenter cord(x0,y0,x1,y1):"
movx2,axmov y2,bx
mov al,13h
mov ah,0
int 10h
call oblique
;按1返回到start
GOTOXY 10,1
mov dx, offset msg10

第二章 光栅图形学4--反走样算法


半色调技术
• 简单区域取样和加权区域取样技术的前 提是多级灰度,利用多级灰度来提高视 觉分辨率。但是,若只有两级灰度呢? 能否使用上述技术呢? • 对于给定的分辨率,通过将几个像素组 合成一个单元来获得多级灰度。 • 例:在一个显示器中将四个像素组成一 个单元,可产生5种光强。
半色调技术
• 可用如下矩阵来表示:
半色调技术
• 一般来说,对于两级灰度显示器可能构 成的灰度数等于单元中像素个数加1 • ∴单元越大,灰度级别越高 • 它是以牺牲空间分辨率为代价的。
半色调技术
• 例:灰度级别=4,每个单元=2*2
• 若有m级灰度,nn个像素组成一个单元,则灰 度级别数为nn(m-1)+1
软件方法1
• 把每个像素分为四个子像素,扫描转换 算法求得各子像素的灰度值,然后对四 像素的灰度值简单平均,作为该像素的 灰度值。
软件方法2
• 设 分 辨 率 为 mn, 把 显 示 窗 口 分 为 (2m+1)(2n+1) 个子像素,对每个子像素 进行灰度值计算,然后根据权值表所规 定的权值,对位于像素中心及四周的九 个子像素加权平均,作为显示像素的颜 色。 • 设m=4,n=3
2.6光栅图形的反走样算法
• 用离散量表示连续量引起的失真现象称之为走样 (aliasing) 。 光栅图形的走样现象
– 阶梯状边界; – 图形细节失真; – 狭小图形遗失:动画序列中时隐时现,产生闪烁。
走样现象举例
• 不光滑(阶梯状)的图形边界
例子:PaintBrush
走样现象举例
• 图形细节失真
5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11
(1)
D/m
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要汇编语言是一门涉及硬件的程序语言,也是软件工程专业的一门重要的专业基础课。

本次课程设计就是利用汇编语言直接操作硬件,实现画图,并且根据键盘字母输入从屏幕上输出不同颜色,不同形状的图形。

该报告主要包括了涉及任务及要求分析,Bresenham画线和直接写入元素两种方法的对比说明,阐述了涉及原理和程序,其中程序主要分为两大部分,主程序和子程序,主程序中包含了清屏指令组,子程序调用指令和退出指令,子程序分别实现画圆,画三角形,画矩形的功能。

本绘图程序人机交互性好,可以方便的调节矩形,三角,圆的大小和形状。

在采用Bresenham算法提高了运行速度同时,图形的显示方法是采用写像素的方法定位精确轨迹平滑。

同时还增加了动态显示效果,可以直观的看到像素点的移动。

程序在编译之后只有2KB大小占用内存小运算快速。

该课程设计中很多内容主要来自图书馆查阅资料和网络资源,整理后进行修改运行,设计任务。

关键字:绘图;动态显示;任意大小AbstractAssembly language is a programming language to the hardware, an important professional basic course is the software engineering. The course design is the use of assembly language to directly operate the hardware, the realization of drawing, and according to the keyboard input and output of different color from the screen, different shapes. The report includes relates to the task and requirement analysis, comparison shows the Bresenham line drawing and direct write elements, two kinds of methods, expounds the principles and procedures of the process involved, mainly divided into two parts, the main program and subroutine, the main program contains theinstruction set, subroutine call instruction and exit instruction, subroutines are implemented draw a circle, draw a triangle, rectangle drawing function.The drawing program good human-computer interaction, can easily adjust the rectangle, triangle, circle size and shape. The Bresenham algorithm is used to improve the speed at the same time, method for displaying graphic method of positioning pixel accurate trajectory smoothing. At the same time also increased the effects of dynamic display, you can see the visual movingpixels. Program after compilation is only 2KB size small memory fast. thecurriculum design in many content mainly from the library and cyber source,after finishing the modify operation, design task.Keywords: drawing; dynamic display; any size目录摘要 (1)1概述 (4)1.1字符构成图形 (4)1.2在图片模式下直接导入相关图形的图片 (4)1.3在图片模式下采用计算求点写像素的方法绘图 (4)1.4在图片模式下采用鼠标绘图 (4)2编程思想 (5)3程序设计 (6)3.1主程序设计 (6)3.2矩形子程序设计 (7)3.3三角形子程序设计 (9)3.4圆形子程序设计 (9)3.5公共使用子程序设计 (9)4硬件原理 (10)5调试结果 (11)结束语 (13)参考文献 (14)致谢 (15)附录1 (16)附录2 (36)1概述1.1字符构成图形在图形由字符构成时,屏幕的显示模式为为文字型。

编程简单但是图像质量和交互性很差。

1.2在图片模式下直接导入相关图形的图片程序较易实现,显示的效果非常好。

但是图片在取模之后很大,在读取像素写像素时较慢。

交互性也不好。

1.3在图片模式下采用计算求点写像素的方法绘图程序编程复杂,算法复杂。

绘图效果较好,程序很灵活可以显示各种形状大小的三角形,矩形和圆。

交互性很好而且还可以改变颜色,添加动态显示,实现图像移动等效果。

1.4在图片模式下采用鼠标绘图程序的交互性很好,可以很方便的确定图形绘制的位置和大小。

但是编程太复杂,查阅了有关资料。

是使用dos中断来调用鼠标,之后对鼠标跟踪控制。

在综合比较之下,程序的性能是首要考虑的指标。

方案三和方案四比起来较易编写一些。

所以最终采用的是方案三。

由于本程序要实现矩形、三角形、圆的绘制,所以将这个分为三个模块,每个人负责自己的模块,主程序由三个人共同完成,各模块分配如下:主程序:三人共同完成矩形:王芳梅三角形:颉国庆圆形:黄飞2编程思想在程序设计时采用先整体再分块,模块化编程的思想。

首先整体设计出程序的框架,写好主程序,再分模块写好各个子函数。

调试好一个功能后再去编写下一个模块。

主函数的主体是一个分支选择程序,包含了三个绘图模块圆,三角,矩形的数据定义和分支入口程序段。

而三个绘图子模块中又各自包含了若干子函数。

同时为了使程序紧凑,还编写了一些各个子模块公共使用的子函数。

程序概要框架图如下图2.1 程序概要框架图3程序设计3.1主程序设计初主程序主体是一个分支选择程序,包含了提示菜单,输入部分和选择部分。

采用MOV AH,9/ INT 21H 中断在屏幕上输出提示信息。

MOV AH,1/ INT 21H 从键盘输入一个字符将它的存在AL 中再与1,2,3,q 相比较跳转到响应的子函数入口程序段中。

同时还设计了检验输入的程序段再输入不为1,2,3 ,q ,时将自动跳转提示重新输入。

图3.1 主程序流程图显示提示字符初始化 开始 退出程序 结束等于q 圆 三角形 矩形等于1 等于3 等于2 从键盘输入一个字符3.2矩形子程序设计在矩形子程序中采用写像素点的方法,点动成线将四条线一条一条的画出来。

首先提示输入信息输入矩形的长和宽,调用一个输入函数将输入数据以16进制的方式存入AX中,再转存到L_S ,W_S 中,然后将屏幕的模式设为图像模式640*480*16色,将长和宽一次存入CX中采用循环LOOP指令,保持X不变Y 依次增加,或者Y不变X依次增加将四条直线一一画出,同时为了使显示效果更好一些对线条进行了加粗,宽度为两个像素,为了使程序结构清晰编写了WRITE_PIXEL宏指令,每调用一次就画出一个点,而且可以认为的设定点的位置颜色等。

在函数中还加入了延时子程序,每画完一个点之后就调用一个延时子程序,这样就可以在屏幕上实现动态显示。

这部分的程序设计中也是采用模块化的思想,先画出一条直线。

改变参数就可以画出另外的三条直线。

同时在屏幕模式设定时也编写宏指令SETMODE。

调用的宏指令如下WRITE_PIXEL MACRO PAGE1,ROW,COLUMN,COLORMOV AH,0CHMOV AL,COLORMOV BH,PAGE1MOV DX,ROWMOV CX,COLUMNINT 10HENDMSETMODE MACRO MODE1MOV AH,0MOV AL,MODE1INT 10HENDM矩形子程序流程图如下图3.2 矩形子程序流程图3.3三角形子程序设计在三角形绘制中程序也分为几个部分,首先是三个顶点的输入子程序。

然后将三个顶点压栈,再调用Bresenham画线子程序。

在Bresenham画线子程序中依次调用写像素子程序和延时子程序实现三条线段的动态显示。

Bresenham算法是计算机图形学中为了“显示器(屏幕或打印机)系由像素构成”的这个特性而设计出来的算法,使得在求直线各点的过程中全部以整数来运算,因而大幅度提升计算速度;Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。

其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。

该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。

3.4圆形子程序设计在圆绘制模块中同样是采用Bresenham画线算法。

先由键盘输入圆半径,再设置成图形模式。

在调用圆Bresenham子程序将相关点堆栈,然后再调用圆画点子程序在屏幕上下左右四个点上向两边同时开始画点。

每画一个点就调用一下延时子程序实现绘图的动态显示。

3.5公共使用子程序设计为了使程序结构较清晰,将三个子模块和主函数共同使用的子函数统一编写。

它们是数据输入子函数READ可以讲键盘输入的数据转化为16进制存在AX 中。

在各个子函数的数据输入模块都是调用的这个子函数。

还有写像素子函数PIXEL。

它的作用是把经过Bresenham算法堆栈的数据用写像素的方法写在屏幕上。

延时子函数DELAY它的作用是延时使图像动态显示。

清屏CLEAR它的作用是调背景色清屏。

便于在图形模式和文字模式之间进行转换。

在其中的延时子程序采用了双层循环的方法,因为各个子程序运行用时不同为了便于调试和取得更好的效果。

不同的子模块对应不同的延时子程序。

4硬件原理显示器有字符显示模式和图形显示两种工作方式,在图形方式下的屏幕由一个一个的像素做成。

通过读写屏幕上的各个像素就可以显示出各种各样的图形。

相关文档
最新文档