图形变换程序设计_第1页
图形变换程序设计_第2页
图形变换程序设计_第3页
图形变换程序设计_第4页
图形变换程序设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、 图形变换程序设计概述此图形转换程序主要是运用写显存的方式去实现。可以实现矩形、三角形和圆形的绘制及图形颜色变换。一、设计要求完成一个图形变换的程序,系统具有4种可选择的功能,按字母“y”画一个用点组成的圆;按字母“s”画一个用不同颜色填充的三角形;按字母“z”画一个用不同颜色填充的矩形;按“q”键退出。二、设计思想(一)、界面掌握程序开头显示一行提示信息。键盘输入“y”进入画圆子程序,输入“s”进入画三角形子程序,输入“z”进入画矩形子程序。(二)、画圆通过写算法来确定圆边点的位置,利用写像素方式画出圆边点,用尽量多的点能较完整地表现出一个圆。算法首选确定圆心位置O(OX,OY),

2、设置圆半径为Radius,圆边任一位置A(X,Y)可由圆心位置和圆半径及方向角(见下图)确定。本程序首先设立也许连续的多个数值(本程序为90个)以确定SIN值及其相对应的COS值。A点位置可由以下表达式确定。 <画圆算法解图>X=SIN*Radius+OXY=COS*Radius+OY由A点又可求出与其相关的三点A,B,B(见上图)。(三)、画三角形首先确定开头位置,然后通过行数和列数的变化一行一行地画三角形的分解部分。由设定的字符(本题为“*”)作为填充三角形元素,行数增1,字符数加2,依此往上画能形成三角形。三角形颜色的变换是在已画好图的基础上在图原位置重画,但转变相

3、应字符的颜色。(四)画矩形在文本方式下首先利用字符(本题为“*”)的随光标的移动而显示画一个矩形框,然后通过设置卷屏(本题为下卷)区域为矩形框内部,转变确定区域的背景颜色即可完成矩形框的颜色变换。三、程序流程图(一)、主流程图 关键代码;主程序MAIN PROC FARASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXINPUT:LEA DX,SYSINFO ;存偏移地址到DXCALL CL_SCREENCALL DISPLAY ;调用显示子程序;键盘输入MOV AH,8 ;键盘输入功能号(无回显)INT 21H ;调用

4、DOS系统中断;-;依据AL推断画哪个图CMP AL,'Y'JZ CIRCLE1CMP AL,'S'JZ TRIANGLE1CMP AL,'Z'JZ TECTANGLE1;-CMP AL,'Q'JE EXIT ;键盘输入'Q'字符,退出CALL ERRORDISJMP INPUTCIRCLE1:CALL CIRCLEMOV AX,3 ;显示方式INT 10H ;调用BIOS中断JMP INPUTTRIANGLE1:CALL TRIANGLEJMP INPUTTECTANGLE1:CALL RECTANGLEJMP

5、INPUTEXIT:CALL CL_SCREENMOV AH,4CH ;退出程序,返回DOSINT 21HMAIN ENDP ;主程序结束(二)、子程序画圆流程图(三)、子程序画三角形流程图注:通过光标的行号列号的转变来一行一行地画三角形的各部分。关键在于每画一行(写显存)在光标位置显示字符的个数应增加两个。让三角形变色就是重画一次三角形,字符属性值BL相应地转变。本程序BL从9变到15,三角形颜色从亮蓝变到亮黄。(四)子程序画矩形流程图四、程序源代码RUZHAN MACRO ;定义宏PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIENDM ;结束宏CHUZ

6、HAN MACRO ;定义宏POP DIPOP SIPOP DXPOP CXPOP BXPOP AXENDM ;结束宏;-DATA SEGMENT ;定义数据段SYSINFO DB 'PLEASE CHOOSE THE LETTER Y,S,Z &'DB ' INPUT Q TO QUIT','$'MYINFO DB '              DESIGN BY DAWNY  ',

7、0DH,0AH,'$'ERRINFO DB 'CHOOSE ERROR!','$'SINE DW 00,02,03,05,07,09,11,12,14,16 ;用于设定SIN函数值0到1DW 17,19,21,23,24,26,28,29,31,33DW 34,36,37,39,41,42,44,45,47,49DW 50,52,53,54,56,57,59,60,62,63DW 64,66,67,68,69,71,72,73,74,75DW 77,78,79,80,81,82,83,84,85,86DW 87,87,88,89,90,91,91

8、,92,93,93DW 94,95,95,96,96,97,97,97,98,98DW 98,99,99,99,99,100,100,100,100DW 100,100MM DW ? ;定义操作数为字的助记符MM代表像素点的列增量(为正)F_MM DW ? ;定义操作数为字的助记符MM代表像素点的列增量(为负)NN   DW ? ;定义操作数为字的助记符NN代表像素点的行增量(为正)F_NN DW ? ;定义操作数为字的助记符NN代表像素点的行增量(为负)OX EQU 120 ;圆中心的列像素OY EQU 240 ;圆中心的行像素RADIUS DW 60 ;圆的半径COLO

9、UR DB 2 ;圆边的颜色KK DW 100COUNT DB 90DATA ENDS;-CODE SEGMENT ;定义代码段;主程序MAIN PROC FARASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AX;置光标位置INPUT:MOV AH,2 ;置光标功能号MOV BH,0 ;页号MOV DH,0 ;行号MOV DL,20 ;列号INT 10H ;调用BIOS中断LEA DX,SYSINFO ;存偏移地址到DXCALL CL_SCREENCALL DISPLAY ;调用显示子程序;键盘输入MOV AH,8 ;键盘输入功能

10、号(无回显)INT 21H ;调用DOS系统中断;-;依据AL推断画哪个图CMP AL,'Y'JZ CIRCLE1CMP AL,'S'JZ TRIANGLE1CMP AL,'Z'JZ TECTANGLE1;-CMP AL,'Q'JE EXIT ;键盘输入'Q'字符,退出CALL ERRORDISJMP INPUTCIRCLE1:CALL CIRCLEMOV AX,3 ;显示方式INT 10H ;调用BIOS中断JMP INPUTTRIANGLE1:CALL TRIANGLEJMP INPUTTECTANGLE1:C

11、ALL RECTANGLEJMP INPUTEXIT:CALL CL_SCREENMOV AH,4CH ;退出程序,返回DOSINT 21HMAIN ENDP ;主程序结束;-;子程序,显示DS中内容DISPLAY PROC NEARMOV AH,9INT 21HRETDISPLAY ENDP;-;子程序,显示错误信息ERRORDIS PROC NEARRUZHANCONTIUNE:MOV AH,2MOV BH,0MOV DH,12MOV DL,30INT 10HLEA DX,ERRINFO ;存偏移地址到DXCALL CL_SCREENCALL DISPLAY ;调用显示子程序;检验键盘状态

12、MOV AH,0BH ;功能号,返回参数ALINT 21HCMP AL,0JE TMP;键盘输入,无回显MOV AH,07H ;功能号INT 21HTMP:JZ CONTIUNECHUZHANRETERRORDIS ENDP;-;子程序,清屏CL_SCREEN PROC NEARRUZHANMOV AH,7 ;卷屏功能号MOV AL,0 ;初始化屏幕MOV BH,7 ;卷入行属性,上此处为正常显示MOV CH,0 ;左上角行号MOV CL,0 ;左上角列号MOV DH,24 ;右下角行号MOV DL,79 ;右下角列号INT 10HCHUZHANRETCL_SCREEN ENDP;-;子程序,

13、画圆CIRCLE PROC NEARRUZHAN ;调用宏,保存寄存器CALL SCREEN ;调用屏幕子程序MOV COUNT,90MOV SI,OFFSET SINE+89*2 ;转化为用于设定COS函数值1到0MOV DI,OFFSET SINEAGAIN:CALL COMPUTE ;调用计算圆边像素点CALL WRITE ;描圆边SUB SI,2 ;SI与源操作数相减ADD DI,2 ;DI与源操作数相加DEC COUNTJNZ AGAIN ;标志符ZF不为0跳转CHUZHAN ;调用宏,恢复寄存器RETCIRCLE ENDP;-;子程序, 设置屏幕SCREEN PROC NEARMO

14、V AX,12H ;显示方式INT 10H ;调用BIOS中断MOV AH,0BH ;置彩色调板MOV BX,0 ;BH为彩色调色板ID,BL为ID配套使用的颜色INT 10HRETSCREEN ENDP;-;子程序,计算圆边像素点COMPUTE PROC NEARMOV AX,SI ;地址SI所指向内容赋给AX,SI+依次得到全部圆边点MUL RADIUS ;目的操作数AX与源操作数RADIUS相乘,结果放AXDIV KK ;得到圆边像素点的列位置MOV MM,AXNEG AX ;将AX转化为二进制补码,以求相对应的像素点MOV F_MM,AX ;补码形式的AX放入F_MMMOV AX,DI

15、MUL RADIUSDIV KK MOV NN,AXNEG AXMOV F_NN,AXRETCOMPUTE ENDP;-;子程序,描点WRITE PROCMOV DX,F_MM ;对应像素列ADD DX,OYMOV CX,NN      ;对应像素行ADD CX,OXCALL WR_DOTMOV CX,F_NNADD CX,OXCALL WR_DOTMOV DX,MMADD DX,OYCALL WR_DOTMOV CX,NNADD CX,OXCALL WR_DOTRETWRITE ENDP;-;子程序,写像素WR_DOT PROCMOV AH,

16、0CH ;写像素功能号MOV AL,COLOUR ;颜色值MOV BH,0 ;页号INT 10HRETWR_DOT ENDP;-;子程序,画三角形TRIANGLE PROC NEARRUZHAN ;保存寄存器MOV BL,9 ;字符属性,暗蓝GOON:MOV CH,1 ;1代表走,0代表暂停COLOR:MOV AH,0BH ;检验键盘状态INT 21HCMP AL,0JNZ AACMP CH,1JNZ COLOR;置光标位置MOV CX,1 ;显示字符个数MOV AH,2 ;功能号MOV BH,0 ;页号MOV DH,6 ;行号MOV DL,36 ;列号INT 10HHUATU:MOV AH,

17、2 ;置光标INT 10H;在光标位置显示字符和属性MOV AH,9 ;功能号MOV BH,0 ;显示页MOV AL,2AH ;字符,'*'INT 10HINC DH ;行数加1,DOS窗口向下画DEC DL ;列号减1,以便形成三角形ADD CX,2 ;每画一行,显示字符数加2个CMP CX,21 ;画完为止JNZ HUATUINC BLCMP BL,15JNZ GOONAA: MOV AH,7INT 21HCMP AL,'Q'JNZ BBJMP EEBB: CMP CH,0JZ CCMOV CH,0JMP COLORCC: MOV CH,1JMP COLOR

18、EE: CHUZHAN ;恢复寄存器RETTRIANGLE ENDP;-;子程序,画矩形RECTANGLE PROC NEARRUZHAN ;保存寄存器;设置显示方式;MOV AH,0;MOV AL,12H;INT 10H;置光标初始位置MOV CX,1MOV AH,2MOV BH,0MOV DH,6MOV DL,6INT 10H;光标右移,向右画RIGHT:MOV AH,2 ;置光标位置INT 10HMOV AH,9 ;功能号9,显示字符和属性MOV AL,2AH ;字符,'*'MOV BL,0FAH ;字符属性,背景为白,前景为红;MOV CX,6INT 10HINC DL

19、 ;列数增加CMP DL,20JNE RIGHT ;当ZF为1时间标连续右移,为0时跳转JMP DOWN;光标下移,向下画DOWN:MOV AH,2INT 10HMOV AH,9MOV AL,2AHMOV BL,0FAH;MOV CX,6INT 10HINC DHCMP DH,12JNZ DOWNJMP LEFT;光标左移,向左画LEFT:MOV AH,2INT 10HMOV AH,9MOV AL,2AHMOV BL,0FAH;MOV CX,6INT 10HDEC DLCMP DL,6JNZ LEFTJMP UP;光标上移,向上画UP:MOV AH,2INT 10HMOV AH,9MOV AL

20、,2AHMOV BL,0FAH;MOV CX,6INT 10HDEC DHCMP DH,6JNZ UP;*;矩形框内部颜色变化COLOUR2:MOV BH,0MOV BL,0CHANGE2:MOV AH,0BHINT 21HCMP AL,0JNE CCMP BL,0JNE CHANGE2MOV AH,7MOV AL,14MOV CH,7MOV CL,7MOV DH,11MOV DL,19INT 10HCALL DELAY ;调用延时子程序ADD BH,0FHCMP BH,0F0HJNZ CHANGE2JMP COLOUR2C: MOV AH,07HINT 21HCMP AL,'Q'JNE DJMP ED:CMP BL,0JE SMOV BL,0JM

温馨提示

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

评论

0/150

提交评论