计算机图形学实验报告及代码 联系客服

发布时间 : 星期日 文章计算机图形学实验报告及代码更新完毕开始阅读6856d0c258f5f61fb73666c4

点坐标系

左上角为坐标原点(0,0) 垂直方向为y轴,自上向下 水平方向为x轴,自左向右

分辨率不同,水平方向和垂直方向的点数也不一样,即其maxx,maxy数值也不同。 在Turbo C中,坐标数据可以用两种形式给出:一种是绝对坐标;另一种是相对坐标。绝对坐标的参考点是坐标的原点(0,0),x和y只能取规定范围内的正整数。相对坐标是相对“当前点”的坐标,所以其坐标的参考点不是坐标系的原点,而是当前点。在相对坐标中,x和y的取值是相对于当前点在x方向和y方向上的增量,x和y可以是正整数,也可以是负整数。点坐标系坐标值的范围决定于所使用适配器/显示分辨率。 二、图形驱动程序与图形模式 1. 图形驱动程序

支持不同图形适配器的一组程序 由于图形显示器的种类繁多,其控制方式也各有差异,所以要显示图形就需先装入相应的图形驱动程序。

Turbo C提供了几种图形驱动程序可支持的图形适配器。下表列出驱动程序其相应的符号常量和规定值。 2. 图形模式

每种图形显示器有不同的图形显示模式

由于每种图形显示器各有几种不同的图形显示模式,因此,要显示图形就必须确定所用的显示模式,也就是说,要显示图形,不但要先装入相应驱动程序,而且还要决定所用的显示模式。不同的图形驱动程序有不同的图形模式;即使在同一图形驱动程序下,也可能会有几种图形模式。

Turbo C中图形函数均在头文件“graphics.h”中定义,所以,凡是在程序中要调用这些图形函数,都必须在程序文件的开头写上文件包含命令: # include <graphics.h> 1. 图形系统初始化 (1).问题的提出

一般缺省情况下,屏幕为80列25行的文本方式。在文本方式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,这就是图形初始化过程。

图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序,来初始化图形化系统,并将系统设置为图形模式。 (2).初始化函数

initgraph()函数格式为:

void far initgraph(int *gdriver;int *gmode,char *path);

①gdriver:是一个整型值,用来指定要装入的图形驱动程序,该值在头文件 graphics.h中定义,如p51表3.l所示。

②gmode:是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率,可同时显示的颜色的多少,调色板的设置方式等,几种不同的图形显示模式如p53表3.2所示。 ③path:是一个字符串,用来指明图形驱动程序所在路径。如果驱动程序就在用户当前目录下,则该参数可以空字符串,否则应给出具体路径名。一般情况下,Turbo C安装在C盘的TC目录中,则该路径为:C:\\TC,如果写在参数中则为“C:\\\\TC”。

注意:前两个参数实际上是整型指针,调用时应加上地址运算符“&”。 对far关键字的解释:far并非C语言的标准关键字,

主要是远程链接的作用,可以将其视为远指针函数,以内存管理是段式管理为例,没有far这个关键字时,内存地址仅是段内跳转,有far这个关键字时内存地址是段间跳转。 几个头文件 graphics.h stdlib.h conio.h

stdio.h

(3)初始化方式

①已知显示器类型的图形系统初始化

已知所用图形显示器的种类和要使用的图形模式,初始化图形系统可如下面程序所示: 例3.1

#include \ main()

{int gdriver,gmode;

gdriver=CGA; /*设置驱动程序为CGA*/ gmode=CGAC0; /*选用CGA图形模式*/ initgraph(&gdriver,&gmode,\ /*初始化图形系统*/

bar3d(10,20,50,80,0,0); /*画一实心长方形*/ getch(); /*等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本方式*/ }

此处也可用整型常数代替符号常量 gdriver=1; gmode=0;

②不知显示器类型的图形初始化。

Turbo C提供了一个对图形显示器硬件测试的函数detectgraph()。 它的格式为:

void far detectgraph(int *gdriver,int *gmode);

该函数在计算机有图形适配器的情况下,确定图形适配器的类型,若系统有图形适配器,则返回适合于适配器的图形驱动程序的代码,用gdriver指向的整型量表示,该函数把gmode所指的变量设置为适配器所能支持的最高分辨率。若系统无图形适配器,则gdriver所指变量为-2。 例3.2

#include \#include “conio.h” #include “stdlib.h” #include \main() { int gdriver,gmode; detectgraph(&gdriver,&gmode); /*测试结果存放于gdriver,gmode中*/ if(gdriver<0)

{ printf(\ exit(1); } /*无图形显示模式时,显示信息,停止程序*/ 标准的输入输出函数

调用DOS控制台I/O子程序的各个函数

说明一些常用的子程序:转换子程序,搜索、排序子程序

可以把上述对图形显示器的检测和初始化工作放在一起来自动完成,即规定gdriver=DETECT,则 initgraph()函数会自动按照系统所配置的图形显示器来确定驱动程序,并把图形模式设置为检测到驱动程序的最高分辨率,实现图形系统初始化。 ③自动初始化图形系统

printf(\

# %d,mode is # %d\\n \ /*显示硬件测试结果*/ getch(); /*等待按一键*/

initgraph(&gdriver,&gmode,\/*初始化*/ bar3d(10,20,50,80,0,0); /*画实心长方形*/ getch(); closegraph(); /*关闭图形系统,返回文本模式*/ return (0); } 例3.3

# include \# include “conio.h” main() { int gdriver=DETECT,gmode; /*自启动搜寻显示器类型和显示模式*/ initgraph(&gdriver,&gmode,\/*初始化*/ bar3d(10,20,50,80,0,0); /*画实心长方形*/ getch(); /*等待按一键*/ closegraph(); /*关闭图形系统,返回文本模式*/ return (0); }

2. 图形系统的关闭

从上述几个例子已看到在图形编程中均先用函数initgraph()对图形系统进行初始化,即启动图形系统,进人绘图状态,而在程序结束前都用函数closegraph()关闭图形系统,以释放图形驱动程序所占用的内存空间,使系统回到文本文件。 关闭图形系统函数格式为: void far closegraph();

所有有关图形显示程序一定是在initgraph()和closegraph()之间。从initgraph()后,显示器就进入图形方式,而从closegraph()后,显示器就退出图形方式回到文本显示方式。 3. 图形模式的控制

为了对图形系统模式进行控制,即从图形模式转换成文本模式,或从文本模式转换成图形模式,或设置驱动器有效模式,或读取当前图形模式和范围,Turbo C都提供了相关函数: (1)从图形模式转换成文本模式 (2)从文本模式转换成图形模式 (3)设置驱动器有效模式 (4)读取当前图形模式和范围 (l)返回当前图形模式值 int far getgraphmode(void);

函数返回当前图形模式,其返回值如表p51 3.2所示。 (2)恢复屏幕在图形初始化前模式 void far restorecrtmode(void);

函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前状态。 (3)设置系统图形模式并清屏幕 void far setgraphmode(int gmode);

函数把当前图形模式设置为gmode所指定的模式。 (4)获取图形驱动器可使用的模式范围

void far getmoderange(int driver,int *lomode,int *himode);

该函数确定由driver所指定图形驱动器能够支持的最低和最高模式,并且把这些值放在由lomode和himode所指向变量中。

通过调用此函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph再返回图形模式。 例3.4

#include \

#include \ #include “conio.h” main()

{ int gdriver,gmode,lo,hi; gdriver=CGA; /*设置CGA的图形驱动程序*/ getmoderange(CGA,&lo,&hi); /*获得CGA的图形模式范围*/

printf(\ /*显示CGA显示模式范围*/ initgraph(&gdriver,&lo,\ /*初始化CGAC0*/

bar3d(100,30,130,150,0,0); /*画一实心方块*/ getch();

gmode=getgraphmode(); /*获得现行图形模式*/ restorecrtmode(); /*返回图形初始化前的现实模式*/

printf(\getch();

setgraphmode(gmode); /*再回到图形模式*/ rectangle(50,30,100,130); /*画一长方形*/ getch();

closegraph(); /*关闭图形系统*/ return (0); }

四、图形坐标的设置

即运用光标定点,确定坐标位置。

可用Turbo C提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。 1.定点

(1)把当前光标移到所需的位置(即x、y点) void far moveto(int x,int y);

此函数把当前窗口中的当前光标位置(cp)移到所需的(x、y)位置(不是画)。 (2)以增量方式移动当前光标 void far moverel(int delax,int delay);

此函数把光标从当前位置(cp)开始,在x,y方向移动,移动距离分别为delax,delay。 例如:若当前光标位置在(10,10)处,执行下列语句后即移到(20,30)的位置上。 moverel(10,20); 2. 读取当前光标位置 int far getx(void);

此函数返回光标在x轴位置。 int far gety(void);

此函数返回光标在y轴的位置。 例3.6 画一“王”字

3.读取x,y轴的最大值” int far getmaxx(void);

此函数返回x轴的最大值(最大横坐标)。 int far getmaxy(void);

此函数返回y轴的最大值(最大纵坐标)。 例如:下列语句显示光标当前位置的x、y值: printf(\