图形变换程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档