c语言图形设计.ppt_第1页
c语言图形设计.ppt_第2页
c语言图形设计.ppt_第3页
c语言图形设计.ppt_第4页
c语言图形设计.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、清华大学 黄维通 设计制作,1,第7章 图形设计与应用,清华大学 黄维通 设计制作,2,本章主要内容,用C语言图形库函数绘图 复杂图形的绘制和图形程 序设计方法,清华大学 黄维通 设计制作,3,图形化界面是软件的趋势,图形化界面具有界面友好、交互性强的特点,但图形界面的开发相对来说会麻烦一些,因此难度也就大一些,一般来说,图形界面的开发,经常与屏幕的分辨率有关。,清华大学 黄维通 设计制作,4,7.1 用C语言图形库函数绘图,清华大学 黄维通 设计制作,5,显示器的工作方式,7.1.1 显示方式及图形方式的初始化,文本方式,图形方式,屏幕上显示的最小单位是字符。不同的文本方式对应相应的行数、列

2、数和颜色。左上角位置为(1,1)。,一像素作为屏幕上的最小单元,以屏幕的左上角为原点,位置为(0,0)。,清华大学 黄维通 设计制作,6,例】用不同的字体和背景颜色显示ASCII码字符 #include “conio.h” void main() int i,j,k; for(i=0;i16;i+) for(j=0;j16;j+) textbackground(i); /置文本屏幕的背景色(0Black1Blue2Green ) textcolor(j); /置字符在文本屏幕上显示的颜色(0Black1Blue2Green. for(k=0;k256;k+) if(k=7) continue;

3、 /不要响铃 cprintf(“%c”,k); /类似printf(),写入当前文本屏幕而不是stdout 将格式化输出写到活动窗口中 getch(); /按任意键继续 ,颜色值见教材,清华大学 黄维通 设计制作,7,【例】绘制右图 #include “conio.h” /Screen-handing functions #include “graphics.h” /Graphics functions void main() int x; int gdriver=DETECT,gmode; initgraph( /将背景色改为用color指定的颜色。9LightBLUE,在图形方式下,以屏幕

4、的左上角为原点,向右为X轴正方向,向下为Y轴正方向,屏幕上的每一个点的位置就根据这个坐标系来确定,1 基本画线类函数的应用,清华大学 黄维通 设计制作,8,for(x=160;x=480;x+=20) line(160,240,x,120); line(160,240,x,360); line(480,240,640-x,360); line(480,240,640-x,120); getch(); closegraph(); ,Tc3运行环境-选择Option菜单中的Linker-选择Library-在对话框中选中Graphics library(具体见附录),注意,清华大学 黄维通 设计制

5、作,9,【例】将屏幕初始化成VGA高分辨率。 #include “conio.h” /Screen-handing functions #include /Graphics functions void main() int gdriver,gmode; gdriver=VGA;/图形驱动程序是VGA gmode=VGAHI;/VGA高分辨率模式 initgraph(/关闭图形模式 ,清华大学 黄维通 设计制作,10,【例】用line和lineto函数画三角形。 #include /Graphics functions #include /Screen-handing functions vo

6、id main() int gd=DETECT,gm;/图形初始化 initgraph( ,7.1.2常用图形函数,清华大学 黄维通 设计制作,11,【例】用8个弧画完整的椭圆(其中每画一个弧后按任意键画下一段弧线) #include #include void main() int s; int gd=DETECT,gm; initgraph( ,其它画弧函数自己看书上机实践,清华大学 黄维通 设计制作,12,2 基本图形类函数的应用,void rectangle(int x1,int y1,int x2,int y2); void circle(int x,int y, int r); v

7、oid drawpoly(int n, int xy2n);,画折线,折线的顶点个数,存放n个顶点坐标,画矩形,清华大学 黄维通 设计制作,13,【例】画一个六边形 #include #include void main() int gd=DETECT, gm, n=7; int xy=150,5,0,190,150,380,300, 380,450,190,300,5,150,5; initgraph( ,清华大学 黄维通 设计制作,14,3 屏幕管理类函数的应用,void setviewport(int x1,int y1,int x2,int y2,int clip);,设置视图区,决定

8、裁剪否。若clip=1,图形输出将只显示在视图区内,超出部分被自动裁剪掉。若clip=0,将不会被裁剪掉,清华大学 黄维通 设计制作,15,void clearviewport(); 清除视图区内显示的内容 void cleardevice(); 清屏函数。文本模式下的清屏函数是clrscr()。cleardevice的作用是清除屏幕上的所有内容 void moveto(int x,int y); 把当前点定位于指定点(x,y),清华大学 黄维通 设计制作,16,【例】用各种线型演示矩形和圆 #include #include void main() int gd=DETECT,gm; ini

9、tgraph( ,4 图形属性控制类函数的应用,样式见教材,清华大学 黄维通 设计制作,17,【例】演示填充效果 #include #include void main() int gd=DETECT,gm; initgraph( ,5 填充类函数的应用,清华大学 黄维通 设计制作,18,【例】函数rectangle/bar/bar3d的区别 #include #include void main() int gd= DETECT,gm; initgraph(,清华大学 黄维通 设计制作,19,for(i=0;i13;i+) cleardevice(); setfillstyle(i,3);/

10、填充样式 rectangle(400,10,600,400);/矩形 bar(10,10,300,100); bar3d(10,150,300,250,20,1); bar3d(10,300,300,400,20,0); getch(); closegraph(); ,清华大学 黄维通 设计制作,20,6 获取屏幕当前显示模式属性函数,【例】获取屏幕属性 #include #include #include void main() int gd=DETECT,gm; initgraph(/获取驱动名称,清华大学 黄维通 设计制作,21,printf(tthe current graphics

11、mode number is %dn,getgraphmode();/获取显示模式 printf(t the current graphics mode is %s,getmodename(getgraphmode(); /获取指向当前显示模式的字符串的指针 getch(); closegraph(); ,清华大学 黄维通 设计制作,22,7 图形方式下的文本输出,void settextstyle(int font, int direction, int charsize);,HORIZ_DIR=0 从左向右输出(默认) VERT_DIR=0 从下向上输出,清华大学 黄维通 设计制作,23,

12、void outtext(char *string) void outtextxy(int x,int y,char *string); 函数outtext在当前位置按照settextstyle中direction指定的方向输出字符串指针string所指的字符串。,清华大学 黄维通 设计制作,24,void settextjustify(int horiz,int vert) 在使用outtextxy进行文本输出时,字符串怎样根据(x,y)确定位置呢?具体地说,是把第一个字符定位于(x,y)呢?还是把最后一个字符定位于(x,y)呢?抑或是中间的呢?settextjustify函数解决了这个问题

13、。,对齐方式见教材,清华大学 黄维通 设计制作,25,void sprintf(char *string,char *format,argument,); 图形方式下,outtext和outtextxy无疑是最完善的输出方式。但是,这两个函数的输出对象都是字符串。那么,如果要输出变量的值应该如何做?sprintf函数解决了这个问题。,清华大学 黄维通 设计制作,26,【例】利用改变字体大小和方向的方法实现动画效果 #include #include #include #include void main() int gd=DETECT,gm; initgraph(/设置字体颜色,清华大学 黄维

14、通 设计制作,27,int i,j,x,y; char a8; sprintf(a,Hello!); for(i=0;i11;i+) x=500; y=50; for(j=1;j11;j+) cleardevice(); x-=15;y+=15; settextstyle(i,0,j); /设置文本样式 settextjustify(1,1);/设置对齐方式 outtextxy(x,y,a); /输出文本 delay(200); /时间延迟200ms getch();closegraph(); ,清华大学 黄维通 设计制作,28, void getimage(int x1,int y1,int

15、 x2,int y2,void *buf); 把矩形区域内的图形复制到buf所指向的内存区域。 void putimage(int x,int y,void *buf,int mode) 把存储在buf所指向的内存区域中的图形(由函数getimage产生)复制到屏幕上,8 屏幕图像的存储与应用,mode 是屏幕模式,见教材,清华大学 黄维通 设计制作,29,7.2复杂图形的绘制和图形程序设计方法,清华大学 黄维通 设计制作,30,【例】给定一组实验数据,根据数据的值绘制曲线。假设有一组平均分布在X轴上的数据,值为4.9,8.3,13.9,23.32,39.8,48.9,57.0,68.78,7

16、9.7,99.2,用图形表示,清华大学 黄维通 设计制作,31,#include #include #include void main() char *cat=1,2,3,4, 5,6,7,8,9,10; float a=4.9,8.3,13.9,23.32, 39.8,48.9,57.0,68.78,79.7,99.2; char xname=X; char yname=Y; char s10;,清华大学 黄维通 设计制作,32,int gd=DETECT,gm; initgraph(/画线 ,清华大学 黄维通 设计制作,33,setcolor(1); rectangle(80,y,100

17、+n*20,15); j=0; for(i=100;i=80+n*20;i+=20) line(i,y,i,y+5); outtextxy(i-4,y+10,catj); /输出X轴坐标值 j+; for(j=0;jy;j+=50) line(70,y-j,80,y-j);/Y轴坐标 sprintf(s,%d,j); outtextxy(45,y-j-3,s); /输出Y轴值 outtextxy(290,y+20,xname);/输出字母X settextstyle(0,1,1); outtextxy(30,40,yname);/输出字母Y getch();closegraph(); ,清华大

18、学 黄维通 设计制作,34,7.2.2图形程序设计中的递归算法及其应用,这个图案极有规律。如果把大三角形的每一个角切下来再放大的话,得到的图形和原来的整个图形样式是一样的,清华大学 黄维通 设计制作,35,【例】显示上面讨论的三角形图形 #include #include #include void fun(int x1,int y1,int x2,int y2,int x3,int y3,int n) int a,b,c,d,e,f; if(n0)/结束递归的条件 a=(x1+x2)/2;b=(y1+y2)/2; /求三角形边的中点坐标 c=(x2+x3)/2;d=(y2+y3)/2; /求三角形边的中点坐标,清华大学 黄维通 设计制作,36,e=(x1+x3)/2;f=(y1+y3)/2; /求三角形边的中点坐标 moveto(a,b); /画三角形 lineto(c,d); lineto(e,f); lineto(a,b); fun(x1,y1,a,b,e,f,n-1);/递归调用 fun(x2,y2,c,d,a,b,n-1); fun(x3,y3,e,

温馨提示

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

评论

0/150

提交评论