课程设计报告
课程名称计算机图形学
课题名称交互式绘图系统
专业计算机科学与技术
班级
学号
姓名
指导教师刘长松曹燚
2012年10 月9 日
湖南工程学院
课程设计任务书
课程名称计算机图形学
课题交互式绘图系统
专业班级
学生姓名
学号
指导老师刘长松曹燚
审批
任务书下达日期2012年9月15 日任务完成日期2012 年10月9 日
一、设计内容与设计要求
1.设计内容:
用橡皮法实现交互式绘图系统。
2.设计要求:
在屏幕上可以选择不同的命令、来实现不同基本图形的绘制。
完成橡皮筋直线,橡皮筋圆,橡皮筋矩形框,多边形裁剪和3阶B样条曲线的作图,且要有比较友好的界面。
3.算法提示:
首先在屏幕上画出菜单和绘图窗口,显示鼠标。
点击相应菜单,点击鼠标,移动鼠标,获取鼠标移动相对位置,画出相应图形。
相关变量定义:
#define _MOUSE鼠标#define CIRCLE 1圆
#define LINE 2直线#define RECTANGLE 3矩形#include "stdio.h" #include "string.h" #include"graphics.h"
#include"math.h"
#include <dos.h> union REGS inreg,outreg; struct SREGS sr;
相关函数:
void meun(int x,int y,char *str) {
setcolor(8);
outtextxy(x+5,28,str);
setcolor(15);
line(x,22,x,40);
line(x,22,y,22);
setcolor(8);
line(x,40,y,40);
line(y,22,y,40);
}
void drawwindows()画窗口{
setbkcolor(7); /*7*/ setcolor(8);
rectangle(0,20,640,460);
rectangle(0,0,640,20);
setfillstyle(1,1);
floodfill(1,1,8);
rectangle(0,460,640,480);
setfillstyle(1,15);
floodfill(1,461,8);
setcolor(RED);
outtextxy(10,468,"Finished By XuY uanFei."); setcolor(15);
line(0,41,640,41);
line(0,459,640,459);
setcolor(8);
line(0,42,640,42);
setcolor(15);
rectangle(610,3,630,17);
setfillstyle(1,7);
floodfill(611,4,15);
setcolor(8);
line(610,17,630,17);
line(630,3,630,17);
line(611,4,628,16);
line(611,16,628,4);
rectangle(2,44,635,459);
setcolor(15);
rectangle(3,45,634,458);
line(611,3,628,15);
line(611,15,628,3);
meun(5,55,"line");
meun(65,165,"rectangle");
meun(175,250,"circle");
meun(260,330,"Bezer");
meun(340,400,"Cut");
}
int _cut()裁剪
void mycircle(double x,double y,double r)画圆{
double i; for(i=0.0;i<360.0;i=i+4)
line(x+r*cos((i+1)/360*3.1415*2),y+r*sin((i+1)/360*3.1415*2),x+r*cos((i+4.0)/360*3.1415*2),y+r* sin((i+4.0)/360*3.1415*2));
void _Bezer(int a[3],int b[3],int m)Beizier曲线
void DisplayMouse()显示鼠标
{
inreg.x.ax=1;
int86(0x33,&inreg,&outreg);
}
void CloseMouse()关闭鼠标
{
inreg.x.ax=2;
int86(0x33,&inreg,&outreg);
}
union REGS DisplayMouseStatus()显示鼠标状态
{
inreg.x.ax=3;
int86(0x33,&inreg,&outreg);
return outreg; }
void GetMouseXY(int *x,int *y)得到鼠标位置
{
DisplayMouse();
outreg=DisplayMouseStatus();
*x=outreg.x.cx;
*y=outreg.x.dx;
}
响应相应函数
void _mytreat(int oldx,int oldy,int x,int y) {
if(num==1)
{
if(flag==LINE)
{
line(px,py,oldx,oldy);
line(px,py,x,y);
}
if(flag==CIRCLE)
{
mycircle(px,py,sqrt((double)((px-oldx)*(px-oldx)+(py-oldy)*(py-oldy))));
mycircle(px,py,sqrt((double)((px-x)*(px-x)+(py-y)*(py-y))));
}
if(flag==RECTANGLE)
{
rectangle(px,py,oldx,oldy);
rectangle(px,py,x,y);
}
}
二、进度安排
第 3 周星期一8:00——12:00
星期二8:00——12:00
星期三8:00——12:00
星期四8:00——12:00
星期五8:00——12:00
第 4 周星期一8:00——12:00
附:
课程设计报告装订顺序:封面、任务书、目录、正文、附件(A4大小的图纸及程序清单)、评分。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
目录
一、概述 (1)
二、功能模块的划分 (2)
三、主要功能的实现 (3)
四、程序调试 (4)
五、总结 (5)
六、附录 (6)
一、概述
1、交互式系统:
随着计算机绘图技术的广泛应用,交互处理已是必不可少的容。
一个交互图形系统使用户能动态的输入坐标位置,指定选择功能,设置交换参数,以及在图形显示期间能够对花面上的某些部分进行修改、删除、增添、存储和在显示操作,且能全部徒手绘图。
交互式绘图软件系统都为用户提供了一个交互工作环境,称交互界面。
通常在图形显示方式,把屏幕划分为图形区,菜单区和提示区。
交互式绘图系统的基本功能一般可归纳为绘图功能、图形编辑、尺寸标准、作图工具、显示功能、询问功能、信息转换、和二次开发工具。
2、橡皮筋技术:
橡皮筋技术是在平面上确定一条直线一般是先定下起点再定下终点,最后把起点和终点连成直线。
如果要求这条直线能通过平面上某一点或和一已知圆相切,上述方法便不易做得很准确。
所谓橡皮筋技术就是在起点确定后,光标移出去定终点时,在屏幕上始终显示一条连接起点和光标中心的直线,这条直线随着光标中心位置的变动而变动,它就像在起点和光标中心之间紧紧地拉着一根橡皮筋,有了这根橡皮筋便比较容易地找到通过一个点或和一个圆相切的直线的位置。