计算机图形学函数_第1页
计算机图形学函数_第2页
计算机图形学函数_第3页
计算机图形学函数_第4页
计算机图形学函数_第5页
已阅读5页,还剩38页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机图形学函数第一页,共四十三页,2022年,8月28日1.图形显示器的工作方式IBMPC机的显示器可以在两种基本视频方式下工作:一种是文本方式;另一种是图形方式。第二页,共四十三页,2022年,8月28日(1)文本方式在文本方式下,屏幕上可以显示的最小单位是字符,字符在屏幕上以行、列排列,如25×80个字符。第三页,共四十三页,2022年,8月28日(2)图形方式在图形方式下,屏幕上可以控制的最小单元称作像素(pixel),它是组成图形的基本元素,一般叫作“点”。通常把屏幕上所包含像素的个数叫做分辨率。分辨率越高,显示的图形越细致、质量越好。第四页,共四十三页,2022年,8月28日

在图形方式下,屏幕上每个像素的显示位置用屏幕坐标系来描述。在该坐标系中,屏幕左上角为坐标系的原点,坐标值为(0,0);水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。见下图。第五页,共四十三页,2022年,8月28日第六页,共四十三页,2022年,8月28日

坐标值的范围决定于所用显示器的分辨率。分辨率不同,水平方向上和垂直方向上的点数也不同,即其maxx、maxy的数值不同。就VGA显示器来说,它通常所用的分辨率为640480,即它的maxx值为639,maxy的值为479。第七页,共四十三页,2022年,8月28日2.图形函数及其用法

TurboC的图形函数均在一个头文件“graphics.h”中定义。所以,凡是在程序中要调用这些图形函数,都必须在源程序的开头写上文件包含命令:#include<graphics.h>第八页,共四十三页,2022年,8月28日

(1)图形系统管理

进入TurboC,显示器处于文本方式下。在文本方式下,所有的图形函数均不能应用。因此在调用图形函数绘图之前,必须先将显示器设置为图形模式,即图形方式初始化。在图形工作完毕之后,又要使显示器回到文本方式,以便进行程序文件等的编辑工作。第九页,共四十三页,2022年,8月28日TC绘图程序:图形系统初始化绘图关闭图形模式

第十页,共四十三页,2022年,8月28日图形方式初始化

图形方式初始化通过函数initgraph来实现,它的功能是通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形模式。其调用格式为:initgraph(&gdriver,&gmode,path);第十一页,共四十三页,2022年,8月28日

gdriver用来指定要装入的图形驱动程序.

若

gdriver=DETECT;则由系统自动检测图形适配器的最高分辨率模式,并装入相应的图形驱动程序.(P269表A-1)

gmode用来设置图形显示模式.不同的图形驱动程序有不同的图形显示模式;在同一个图形驱动程序下,也可能有几种图形显示模式.

图形显示模式决定了显示的分辨率、颜色数等。(P271表A-4)

path是一个字符串,用来指明图形驱动程序所在的路径。若图形驱动程序在用户当前目录下,则path为空串.

第十二页,共四十三页,2022年,8月28日

举例:intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,“c:\\tc”);第十三页,共四十三页,2022年,8月28日关闭图形模式关闭图形模式用函数closegraph,其调用方法为:closegraph();(该函数不需参数)第十四页,共四十三页,2022年,8月28日(2)绘图函数

TurboC提供了一些基本的绘图函数,以方便图形设计。所有绘图函数调用时的参数,其类型均为整型,因此填入参数表的参数,应为整数或整型变量。第十五页,共四十三页,2022年,8月28日

LINE函数:

在指定两点之间画直线。如:line(x1,y1,x2,y2);LINETO函数:

从当前点画线到指定点。如:lineto(x,y);MOVETO函数:

移到指定点(不画线)。如:moveto(x,y);第十六页,共四十三页,2022年,8月28日

CIRCLE函数:

指定圆心和半径画圆。如:circle(xc,yc,r);ARC函数:

画一段圆弧。要求指定圆弧所在圆的圆心、半径,以及圆弧的起始角度和终止角度。如:arc(xc,yc,angs,ange,r);第十七页,共四十三页,2022年,8月28日

ellipse(x,y,a1,a2,rx,ry);

起始角度a1,终止角度a2,椭圆心(x,y),x轴半径rx,y轴半径ry.

例:ellipse(200,100,0,360,50,20);画一个椭圆周画一个椭圆弧第十八页,共四十三页,2022年,8月28日

RECTANGLE函数:

指定矩形的左上角和右下角画一个矩形。如:rectangle(x1,y1,x2,y2);DRAWPOLY函数:

画一条多边折线。如:drawpoly(n,p);其中,n为多边折线的顶点数;p为存放顶点坐标值的数组名。数组元素个数为2*n.

如果首尾两点重合,则可以绘制一个多边形。第十九页,共四十三页,2022年,8月28日

例如:#include“graphics.h“

main()

{

intgdriver,gmode;

staticintp[8]={10,20,150,150,200,30,10,20};

gdriver=DETECT;

initgraph(&gdriver,&gmode,“”);/*图形系统初始化*/

drawpoly(4,p);/*画一个三角形*/

getch();

closegraph();/*关闭图形系统,返回文本方式*/}第二十页,共四十三页,2022年,8月28日

图形的属性指颜色和线型,颜色又分为背景色和前景色。背景色指的是屏幕的颜色,即底色;前景色指的是绘图用的颜色。任何绘图函数都是在当前颜色(背景色和前景色)和线型的状态下作图的。系统的默认值为:背景色为黑色;前景色为白色;线型为实线。

第二十一页,共四十三页,2022年,8月28日setbkcolor(背景色);设置背景色

如:setbkcolor(BLUE);设置背景色为兰色

setbkcolor(12);设置背景色为12号色setcolor(画笔色);设置画笔色

如:setcolor(YELLOW);设置画笔色为黄色

setcolor(5);设置画笔色为5号色注意:背景色和画笔色可以是名字或数字。见下表。

第二十二页,共四十三页,2022年,8月28日符号名数值颜色BLACK

BLUE

GREEN

CYAN

RED

MAGENTA

BROWN

LIGHTGRAY

DARKGRAY

LIGHTBLUE0

1

2

3

4

5

6

7

8

9黑色

蓝色

绿色

青色

红色

紫红色

棕色

浅灰色

深灰色

浅蓝色P277表A-7第二十三页,共四十三页,2022年,8月28日符号名数值颜色LIGHTGREEN

LIGHTCYAN

LIGHTRED

LIGHTMAGENTA

YELLOW

WHITE10

11

12

13

14

15浅绿色

浅青色

浅红色

浅紫色

黄色

白色第二十四页,共四十三页,2022年,8月28日

putpixel(x,y,color);

在(x,y)处以color色画一点

例:putpixel(10,20,RED);在(10,20)处画一红点getpixel(x,y);得到(x,y)处的颜色值

例:if(getpixel(300,270)==7)………

outtextxy(x,y,”字符串”);

从(x,y)处开始显示字符串

例:outtextxy(10,20,”ABCF”);在(10,20)处显示ABCF

第二十五页,共四十三页,2022年,8月28日setfillstyle(p,color);

设置填充模式p(取值为0-12)及填充色color。填充模式的含义见P290表A-13。

floodfill(x,y,bcolor);从(x,y)开始,用setfillstyle设置好的填充模式及填充色向四周填充,直到边界(边界色为bcolor)为止。

例:setcolor(RED);

circle(300,200,50);

setfillstyle(2,GREEN);

floodfill(300,200,RED);

从(300,200)开始,按setfillstyle设置的模式及颜色开始填充,一直到红色边界(圆周边界)才停止。第二十六页,共四十三页,2022年,8月28日bar(x1,y1,x2,y2);

由setcolor设置的颜色画一个矩形,并自动按setfillstyle设置的模式及颜色对矩形填充.

矩形的左上角坐标(x1,y1),矩形的右下角坐标(x2,y2)pieslice(x,y,a1,a2,r);

由setcolor设置的颜色画一个扇形,并自动按setfillstyle设置的模式及颜色对扇形填充.

起始角度a1,终止角度a2,圆心(x,y),半径r第二十七页,共四十三页,2022年,8月28日

voidfillellipse(intx,inty,intrx,intry);

画出一实心椭圆

voidsector(intx,inty,intangs,intange,intrx,intry);画出一实心椭圆扇区

voidfillpoly(intnps,int*pxy);

画并填充一多边形。第二十八页,共四十三页,2022年,8月28日例1:

#include“graphics.h”

main()

{intgdriver,gmode;

gdriver=DETECT;

initgraph(&gdriver,&gmode,“”);/*图形系统初始化*/

line(10,20,120,200);/*从(10,20)到(120,200)画一直线*/

getch();/*任击一个键便继续向下运行*/

closegraph();/*关闭图形系统,返回文本方式*/}F9编译并运行,F10光标落在菜单项。(3)绘图程序例子第二十九页,共四十三页,2022年,8月28日

例2:#include<graphics.h>

main(){intgd=DETECT,gm;initgraph(&gd,&gm,“”);

setbkcolor(LIGHTBLUE);setcolor(RED);circle(320,240,100);getch();closegraph();}第三十页,共四十三页,2022年,8月28日例3:

#include<graphics.h>voidmydraw(){line(160,120,480,120);line(480,120,480,360);line(480,360,160,360);line(160,360,160,120);}main(){intgdriver=DECTECT,gmode;等价于:

voidmydraw1(){moveto(160,120);lineto(480,120);lineto(480,360);lineto(160,360);lineto(160,120);}第三十一页,共四十三页,2022年,8月28日

initgraph(&gdriver,gmode,”c:\\tc”);cleardevice();mydraw();getch();closegraph();}例3第三十二页,共四十三页,2022年,8月28日例4:

#include<graphics.h>main(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setbkcolor(15);setcolor(4);ellipse(320,240,0,360,300,200);第三十三页,共四十三页,2022年,8月28日

setfillstyle(1,6);putpixel(320,240,6);floodfill(320,240,4);getch();closegraph();}例4第三十四页,共四十三页,2022年,8月28日例5:

#include<graphics.h>main(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setbkcolor(15);setcolor(4);第三十五页,共四十三页,2022年,8月28日

setfillstyle(1,6);fillellipse(320,240,300,200);getch();closegraph();}例5第三十六页,共四十三页,2022年,8月28日P296例B-1金刚石图案#include<graphics.h>#include<math.h>voidmain(){floatt;intx0=320,y0=240;intn,i,j,r,x[50],y[50];第三十七页,共四十三页,2022年,8月28日intgdriver=DETECT,gmode;

printf("inputn(23-31)andr(100-200)\n");

scanf("%d,%d",&n,&r);

initgraph(&gdriver,&gmode,"d:\\tc\\bgi");

cleardevice();

setcolor(9);

setbkcolor(4)第三十八页,共四十三页,2022年,8月28日

t=6.28314/n;

for(i=0;i<n;i++){x[i]=r*cos(i*t)+x0;y[i]=r*sin(i*t)+y0;}for(i=0;i<n-2;i++){for(j=i+1;j<n;j++){line(x[i],y[i],x[j],y[j]);}第三十九页,共四十三页,2022年,8月28日

}getch();closegraph();}}第四十页,共四十三页,2022年,8月28日下面是与动画有关的几个函数:•getimage(x1,y1,x2,y2,p);

将屏幕左上角(x1,y1),右下角(x2,y2)的矩形区域内的图象存到指针P所指向的内存区域中。

•putimage(x,y,p,op);

将p所指向的内存区域的内容在屏幕上显示,左上角坐标(x,y)。

op=0:预先对屏幕不进行任何操作;

1:预先对屏幕进行“异或”操作;

2:预先对屏幕进行“或”操作;3:预先对屏幕进行“与”操作;4:预先对缓冲区内容进行求“反”操作;imag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论