图形变换程序设计

2019-01-26 18:28

图形变换程序设计 概述

此图形转换程序主要是运用写显存的方式去实现。可以实现矩形、三角形和圆形的绘制及图形颜色变换。 一、设计要求

完成一个图形变换的程序,系统具有4种可选择的功能,按字母“y”画一个用点组成的圆;按字母“s”画一个用不同颜色填充的三角形;按字母“z”画一个用不同颜色填充的矩形;按“q”键退出。 二、设计思想

(一)、界面控制

程序开始显示一行提示信息。键盘输入“y”进入画圆子程序,输入“s”进入画三角形子程序,输入“z”进入画矩形子程序。 (二)、画圆

通过写算法来确定圆边点的位置,利用写像素方式画出圆边点,用尽量多的点能较完

整地表现出一个圆。 算法

首选确定圆心位置O(OX,OY),设置圆半径为Radius,圆边任一位置A(X,Y)可由圆心位置和圆半径及方向角θ(见下图)确定。本程序首先设立大概连续的多个数值(本程序为90个)以确定SINθ值及其相对应的COSθ值。A点位置可由以下表达式确定。 <画圆算法解图>

X=SINθ*Radius+OX Y=COSθ*Radius+OY

由A点又可求出与其相关的三点A’,B,B’(见上图)。 (三)、画三角形 首先确定开始位置,然后通过行数和列数的变化一行一行地画三角形的分解部分。由设定的字符(本题为“*”)作为填充三角形元素,行数增1,字符数加2,依此往上画能形成三角形。

三角形颜色的变换是在已画好图的基础上在图原位置重画,但改变相应字符的颜

色。

(四)画矩形

在文本方式下首先利用字符(本题为“*”)的随光标的移动而显示画一个矩形框,然后通过设置卷屏(本题为下卷)区域为矩形框内部,改变确定区域的背景颜色即可完成矩形框的颜色变换。 三、程序流程图 (一)、主流程图

关键代码 ;主程序

MAINPROCFAR

ASSUMEDS:DATA,SS:STACK,CS:CODE START:

MOVAX,DATA MOVDS,AX INPUT:

LEADX,SYSINFO ;存偏移地址到DX CALL CL_SCREEN

CALL DISPLAY ;调用显示子程序 ;键盘输入

MOVAH,8 ;键盘输入功能号(无回显) INT 21H ;调用DOS系统中断 ;---------------------------------- ;根据AL判断画哪个图 CMPAL,'Y' JZCIRCLE1 CMPAL,'S' JZTRIANGLE1 CMPAL,'Z'

JZTECTANGLE1

;---------------------------------- CMPAL,'Q'

JEEXIT ;键盘输入'Q'字符,退出 CALL ERRORDIS JMPINPUT CIRCLE1: CALL CIRCLE

MOVAX,3 ;显示方式

INT 10H ;调用BIOS中断 JMPINPUT TRIANGLE1:

CALL TRIANGLE JMPINPUT TECTANGLE1: CALL RECTANGLE JMPINPUT EXIT:

CALL CL_SCREEN

MOVAH,4CH ;退出程序,返回DOS INT 21H

MAINENDP ;主程序结束 (二)、子程序画圆流程图 (三)、子程序画三角形流程图

注:通过光标的行号列号的改变来一行一行地画三角形的各部分。关键在于每画一行(写显存)在光标位置显示字符的个数应增加两个。让三角形变色就是重画一次三角形,字符属性值BL相应地改变。本程序BL从9变到15,三角形颜色从亮蓝变到亮黄。 (四)子程序画矩形流程图

四、程序源代码

RUZHANMACRO ;定义宏 PUSHAX PUSHBX PUSHCX PUSHDX PUSHSI PUSHDI

ENDM ;结束宏

CHUZHANMACRO ;定义宏 POPDI POPSI POPDX POPCX POPBX POPAX

ENDM ;结束宏

;---------------------------------------------------------- DATA SEGMENT ;定义数据段

SYSINFODB 'PLEASE CHOOSE THE LETTER Y,S,Z &' DB ' INPUT Q TO QUIT','$'

MYINFODB ' DESIGN BY DAWNY ',0DH,0AH,'$' ERRINFODB 'CHOOSE ERROR!','$'

SINEDW00,02,03,05,07,09,11,12,14,16 ;用于设定SIN函数值0到1 DW17,19,21,23,24,26,28,29,31,33 DW34,36,37,39,41,42,44,45,47,49 DW50,52,53,54,56,57,59,60,62,63 DW64,66,67,68,69,71,72,73,74,75 DW77,78,79,80,81,82,83,84,85,86 DW87,87,88,89,90,91,91,92,93,93 DW94,95,95,96,96,97,97,97,98,98 DW98,99,99,99,99,100,100,100,100 DW100,100

MMDW ? ;定义操作数为字的助记符MM代表像素点的列增量(为正) F_MMDW ? ;定义操作数为字的助记符MM代表像素点的列增量(为负) NN DW ? ;定义操作数为字的助记符NN代表像素点的行增量(为正) F_NNDW ? ;定义操作数为字的助记符NN代表像素点的行增量(为负) OXEQU120 ;圆中心的列像素 OYEQU240 ;圆中心的行像素 RADIUSDW60 ;圆的半径 COLOURDB2 ;圆边的颜色 KKDW100 COUNT DB90 DATA ENDS

;---------------------------------------------------------- CODESEGMENT ;定义代码段 ;主程序

MAINPROCFAR

ASSUMEDS:DATA,SS:STACK,CS:CODE START:

MOVAX,DATA MOVDS,AX ;置光标位置 INPUT:

MOVAH,2 ;置光标功能号 MOVBH,0 ;页号 MOVDH,0 ;行号 MOVDL,20 ;列号

INT 10H ;调用BIOS中断

LEADX,SYSINFO ;存偏移地址到DX CALL CL_SCREEN

CALL DISPLAY ;调用显示子程序 ;键盘输入

MOVAH,8 ;键盘输入功能号(无回显) INT 21H ;调用DOS系统中断 ;---------------------------------- ;根据AL判断画哪个图

CMPAL,'Y' JZCIRCLE1 CMPAL,'S' JZTRIANGLE1 CMPAL,'Z'

JZTECTANGLE1

;---------------------------------- CMPAL,'Q'

JEEXIT ;键盘输入'Q'字符,退出 CALL ERRORDIS JMPINPUT CIRCLE1: CALL CIRCLE

MOVAX,3 ;显示方式

INT 10H ;调用BIOS中断 JMPINPUT TRIANGLE1: CALL TRIANGLE JMPINPUT TECTANGLE1: CALL RECTANGLE JMPINPUT EXIT:

CALL CL_SCREEN

MOVAH,4CH ;退出程序,返回DOS INT 21H

MAINENDP ;主程序结束

;---------------------------------------------------------- ;子程序,显示DS中内容 DISPLAYPROCNEAR MOVAH,9 INT 21H RET

DISPLAYENDP

;---------------------------------------------------------- ;子程序,显示错误信息 ERRORDISPROCNEAR RUZHAN CONTIUNE: MOVAH,2 MOVBH,0 MOVDH,12 MOVDL,30


图形变换程序设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:变频器应用中抗干扰的问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: