图形变换程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形变换程序设计
概述
此图形转换程序主要是运用写显存的方式去实现。可以实现矩形、三角形和圆形的绘制及图形颜色变换。
一、设计要求
完成一个图形变换的程序,系统具有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,依此往上画能形成三角形。
三角形颜色的变换是在已画好图的基础上在图原位置重画,但改变相应字符的颜色。
(四)画矩形
在文本方式下首先利用字符(本题为“*”)的随光标的移动而显示画一个矩形框,然后通过设置卷屏(本题为下卷)区域为矩形框内部,改变确定区域的背景颜色即可完成矩形框的颜色变换。
三、程序流程图
(一)、主流程图
关键代码
;主程序
MAIN PROC FAR
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
INPUT:
LEA DX,SYSINFO ;存偏移地址到DX CALL CL_SCREEN
CALL DISPLAY ;调用显示子程序
;键盘输入
MOV AH,8 ;键盘输入功能号(无回显)INT 21H ;调用DOS系统中断
;----------------------------------
;根据AL判断画哪个图
CMP AL,'Y'
JZ CIRCLE1
CMP AL,'S'
JZ TRIANGLE1
CMP AL,'Z'
JZ TECTANGLE1
;---------------------------------- CMP AL,'Q'
JE EXIT ;键盘输入'Q'字符,退出CALL ERRORDIS
JMP INPUT
CIRCLE1:
CALL CIRCLE
MOV AX,3 ;显示方式
INT 10H ;调用BIOS中断
JMP INPUT
TRIANGLE1:
CALL TRIANGLE
JMP INPUT
TECTANGLE1:
CALL RECTANGLE
JMP INPUT
EXIT:
CALL CL_SCREEN
MOV AH,4CH ;退出程序,返回DOS
INT 21H
MAIN ENDP ;主程序结束
(二)、子程序画圆流程图
(三)、子程序画三角形流程图
注:通过光标的行号列号的改变来一行一行地画三角形的各部分。关键在于每画一行(写显存)在光标位置显示字符的个数应增加两个。让三角形变色就是重画一次三角形,字符属性值BL相应地改变。本程序BL从9变到15,三角形颜色从亮蓝变到亮黄。
(四)子程序画矩形流程图
四、程序源代码
RUZHAN MACRO ;定义宏
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
ENDM ;结束宏
CHUZHAN MACRO ;定义宏
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
ENDM ;结束宏
;---------------------------------------------------------- DATA SEGMENT ;定义数据段
SYSINFO DB 'PLEASE CHOOSE THE LETTER Y,S,Z &'
DB ' INPUT Q TO QUIT','$'
MYINFO DB ' DESIGN BY DAWNY ',0DH,0AH,'$'
ERRINFO DB 'CHOOSE ERROR!','$'
SINE DW00,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
MM DW ? ;定义操作数为字的助记符MM代表像素点的列增量(为正)F_MM DW ? ;定义操作数为字的助记符MM代表像素点的列增量(为负)NN DW ? ;定义操作数为字的助记符NN代表像素点的行增量(为正)F_NN DW ? ;定义操作数为字的助记符NN代表像素点的行增量(为负)OX EQU120 ;圆中心的列像素
OY EQU240 ;圆中心的行像素
RADIUS DW60 ;圆的半径
COLOUR DB2 ;圆边的颜色
KK DW100
COUNT DB90
DATA ENDS