实验指导书
课 程 名 称:
编 写 教 师:
编 写 时 间:
目 录
一、 实验目的和要求………………………………………………….1
二、 实验一、图形的显示…………………………………………….3
三、 实验二、平移变换和比例变换……………………..………….4
四、 实验三、旋转变换……………………………………………….5
五、 实验四、错切变换和对称变换………….………………………6
附录 C语言图形函数及使用说明…………………………………….7
参考文献…………………………………………………………………9
实验的目的和要求
目的:本次上机实验共4个实验(8个学时)。通过上机实验加深对课程内容、尤其是对图形变换原理和图形软件开发过程的理解,增加感性认识,软件设计、编写及调试的能力。
要求:
1.用C语言编写图1(螺栓)的二维几何图形变换程序,上机调试通过,正确运行。编程要求(1)友好的人机交互操作;(2)各变换连续控制(每次变换无须退出);(3) 先编好程序再上机调试运行。
2.提交实验报告
实验报告的内容为:
⑴ 设计内容
本次实验的试验内容(参照实验指导书)。
⑵ 设计原理
本次实验的实验原理(变换原理)。
⑶ 设计框图
程序设计流程图。
⑷ 程序设计说明文档
主要参变量、主要结构、主要语句(算法)
的说明。
⑸ 实验总结 图1
本次实验的个人体会、收获、不足等。
⑹ 源程序
调试通过的C语言程序源代码。
3.成绩评定
百分制。成绩=运行演示(60%)+实验报告(40%)
实验一、图形的显示
1.实验内容
实现图形的正常显示(以正常形状比例、大小、居中显示图形)。
2.实验原理
l y坐标的变换
计算机屏幕的坐标系原点在左上角(如图2示),一般的 取值范围:x(0~1023/799);y(0~767/599)。
图形正常显示应以左下角为坐标原点,因此
图形的y坐标需转换:
y’(程序中实际使用)
=y方向的最大取值范围-y(图形坐标)。l 图形的居中显示
确定图形中点坐标(xz,yz);确定屏幕中点坐标(xp,yp), 使
(xz,yz)与(xp,yp)重合(实际是平移变换)。
l 图形显示时的正常比例
图形各部分比例适当取决于图形坐标的取值正确;图形相对屏幕大小的比例,可用相对于图形中心点的比例变换完成(见)。
l 图形的生成
定义两个数组,一个顺序存放图形的各个原始坐标点;另一个顺序存放图形变换以后的各个坐标点,程序中用画线指令(line、linerel、lineto等)按存入顺序取出变换后的坐标点画图。(先变换、后画图)
3.实验要求
该项内容是后面实验的基础,要求显示准确
实验二、平移变换和比例变换
一、平移变换
1.实验内容
实现图形的平移变换。
2.实验原理
平移变换公式:[x’ y’ 1]= [x y 1]·T=[x+L y+m 1]
所以: x′=x + L; y′=y + m
其中:T-平移变换矩阵;(x′,y′)-变换后的新坐标;
(x,y)-原坐标;L、m-分别为x方向和y方向的平移量。
3.实验要求
应能实现图形的任意位置的平移,两种控制方式:⑴ 交互输入移动距离(坐标),完成移动;⑵ 用方向键控制移动。后者最好。
二、比例变换
1.实验内容
实现图形的比例变换(组合变换)。
2.实验原理
比例变换(组合变换)公式:[x’ y’ 1]= [x y 1]·T
其中:T(组合变换矩阵)=T1 (平移变换矩阵)* T2(基本比例变换矩阵)* T3(平移变换矩阵)
请同学自行求出最终的解析式:x’=?;y’=?。
比例因子s:s>1是放大;0<s<1是缩小。
3、实验要求
⑴ 确定图形的中心(随当前图形在屏幕的位置不同);⑵ 相对图形中心的比例变换;⑶ 图形放大、缩小功能;⑷ 等比变换。
实验三、旋转变换
1.实验内容
实现图形的旋转变换(组合变换)。
2.实验原理
旋转变换(组合变换)公式:[x’ y’ 1]= [x y 1]·T
其中:T(组合变换矩阵)=T1 (平移变换矩阵)* T2(基本旋转变换矩阵)* T3(平移变换矩阵)
请同学自行求出最终的解析式:x’=?;y’=?。注意:转角规定逆时针为正,顺时针为负。
3、实验要求
⑴ 交互输入旋转中心坐标和旋转角度值;⑵ 相对图形旋转中心的旋转变换;⑶ 旋转中心是任意的;⑷ 可以逆时针、顺时针旋转;⑸ 可以任意角度旋转。
实验四、错切变换和对称变换
一、错切变换
1.实验内容
分别实现图形沿x、y方向错切变换。
2.实验原理
变换公式:[x’ y’ 1]= [x y 1]·T
沿x方向错切变换:T= c<>0,错切因子;
沿y方向错切变换:T= b<>0,错切因子。
请同学自行求出最终的解析式:x’=?;y’=?。
3、实验要求
交互输入错切因子,可分别实现图形两个方向的错切变换。
二、对称变换
1.实验内容
分别实现图形相对并行和垂直x坐标轴的任意直线的对称变换(组合变换)。
2.实验原理
变换公式:[x’ y’ 1]= [x y 1]·T
其中:T(组合变换矩阵)=T1 (平移变换矩阵)* T2(基本对称变换矩阵)* T3(平移变换矩阵)
请同学自行求出最终的解析式:x’=?;y’=?。
3、实验要求
⑴ 交互输入平行或垂直x轴直线的位置坐标;⑵ 相对直线的对称变换;⑶ 参照直线是任意的。
附录 C语言图形函数及使用说明
1、 图形系统初始化
TURBO C的所有文件均在graphics.h文件中,因此,在使用图形系统时,程序一定有
“#include <graphics.h>”,同时要将“EGAVGA.BGI”文件放在程序的同一目录下。
1)图形初始化函数:
void far initgraph(int *gd,int *gm,char *path );
gd:指定图形驱动程序;gm:图形模式;path:指明图形驱动程序(EGAVGA.BGI)所在目录。
2)关闭图形系统函数:
void closegraph();
例:
#include “graphics.h”
main()
{ int gd, gm;
gm=DETECT;
initgraph(&gm, &gd, “”);
setbkcolor(1); /*设置背景为蓝色*/
setcolor(14); /*设置前景为黄色*/
clearviewport ( ); /*屏幕显示为蓝色*/
bar3D(10,20,50,180,0,0); /*作实心方块图*/
getch();
closegraph();
}
2、 图形状态控制函数
1) detectgraph(); 图形适配器硬件测试。
格式:coid far detectgraph(int far *deriver,int far mode);
2) getmaxx():返回当前图形模式下屏幕的最大x值。
用法:max_x=getmaxx();
3) getmaxy():返回当前图形模式下屏幕的最大y值。
用法:max_y=getmaxy();
例:
………
printf(“x坐标最大值:%d,y坐标最大值:%d”,getmaxx( ),getmaxy( ));
………
4) setbkcolor(int color):设置当前背景颜色(在清屏后起作用)。
用法:setbkcolor( int color); color-颜色值,整型,意义如下:
0-黑色;1-兰;2-绿;3-青;4-红;5-洋红;6-棕;7-浅灰;8-深灰;
9-淡蓝;10-淡绿;11-淡青;12-淡红;13-粉红;14-金黄;15-白。
5) setcolor( int color):设置当前绘图颜色。
用法:setcolor(int color);color-颜色值,整型,意义如上。
6) getbkcolor( ):返回当前背景色。
用法:int far getbkcolor( );
7) getcolor( ):返回当前绘图色。
用法:int far getcolor( );
3、 画图函数
1) putpixel (int x,int y,int color):在(x,y)点处画一个点,颜色是“color”。
2) getpixel(int x, int y):返回(x,y)点的颜色值,整型。
3) moveto(int x, int y):将当前画笔移至(x,y)处。
4) moverel(int dx, int dy):将当前画笔在X、Y方向分别移动dx、dy距离。
5) line(int x1, int y1, int x2, int y2):用当前颜色、当前线性在两点(X1,Y1)(X2,Y2)之间画一条直线。
6) linerel(int dx, int dy):从当前画笔到距当前画笔dx、dy距离的点之间,画一条直线。
7) lineto(int x, int y):从当前画笔处到(x,y)点之间画一条直线。
8) arc(int x, int y, int stangle, int endangle, int redius):以(x,y)为圆心,redius为半径,stangle为起始角,endangle为终止角(以度为单位,逆时针为正),画一圆弧。
9) circle(int x, int y, int redius):以(x,y)为圆心,redius为半径画一园。
10) ellipse (int x, int y, int stangle, int endangle, int xredius, int yradius):画一椭圆。
其中:(x,y)为椭圆中心;stangle为起始角;endangle为终止角;xredius、yredius为长短轴半径。
11) bar (int left, int top, int right, int bittom):画一填充长方条形。(left, top)为矩形左上角坐标;(right, bottom)为右下角坐标。
12) bar3d (int left, int top, int right, int bottom, int depth, int topflag):画一个立体填充矩形。left, top)为矩形左上角坐标;(right, bottom)为右下角坐标。Depth表示立体感的深度;topflag决定是否给立体矩形加顶,topflag=0不加顶;否则,加顶。
13) rectangle(int left, int top, int right, int bottom):画一矩形(不填充)。(left, top)为矩形左上角坐标;(right, bottom)为右下角坐标。
14) setlinestyle (int linestyle, unsigned upattern, int thickness ):设置当前画线宽度和线型。Linestyle 定义线型,意义如下:0-实线;1-点线;2-中心线;3-破折线;thickness 定义线宽,意义如下:1-正常(一个象素宽);3-三个象素宽;
upattern 与用户定义线型有关,一般等于0。
15) setfillstyle (int pattern, int color):设置填充模式和颜色。
Pattern 定义填充模式:0-背景色;1-实填充;2-“-”线填充;3-“///”线填充;4-“///”粗线填充;5-“\\\”粗线填充;6-“\\\”线填充;7-网线填充;
8-交叉线填充;9-间隔线填充。
Color 定义填充颜色。
4、 屏幕窗口处理
1) cleardevice( ):清除图形屏幕。
2) clearviewport( ):清除当前图形窗口。
参考文献
1 谭浩强等. C语言程序设计.北京:清华大学出版社,2000
2 姚英学,蔡颖等.计算机辅助设计与制造.北京:高等教育出版社,
20##
3 童秉枢等.机械CAD技术基础.北京:清华大学出版社,1996
4 袁泽虎.计算机辅助设计与制造.北京:中国水利水电出版社,2002
5 葛友华.CAD/CAM技术.北京:机械工业出版社,2000
6 唐荣锡.CAD/CAM技术.北京:北京航空航天大学出版社,1994
7 范玉青等.CAD软件设计.北京:北京航空航天大学出版社,1996
8 蔡颖.CAD/CAM原理与应用.北京:机械工业出版社,1998