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

下载本文档

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

文档简介

第7章 图形设计与应用 1清华大学 黄维通 设计制作 本章主要内容 用C语言图形库函数绘图 复杂图形的绘制和图形程 序设计方法 2清华大学 黄维通 设计制作 图形化界面是软件的趋势, 图形化界面具有界面友好、交互 性强的特点,但图形界面的开发 相对来说会麻烦一些,因此难度 也就大一些,一般来说,图形界 面的开发,经常与屏幕的分辨率 有关。 3清华大学 黄维通 设计制作 7.1 用C语言图形库函数绘图 4清华大学 黄维通 设计制作 显示 器的 工作 方式 7.1.1 显示方式及图形方式的初始化 文本方式 图形方式 屏幕上显示的最小单 位是字符。不同的文 本方式对应相应的行 数、列数和颜色。左 上角位置为(1,1)。 一像素作为屏幕上的 最小单元,以屏幕的 左上角为原点,位置 为(0,0)。 5清华大学 黄维通 设计制作 例】用不同的字体和背景颜色显示ASCII码字符 #include “conio.h” void main() int i,j,k; for(i=0;i选择Option菜单中的 Linker-选择Library-在对话框中选 中Graphics library(具体见附录) 注意 8清华大学 黄维通 设计制作 【例】将屏幕初始化成VGA高分辨率。 #include “conio.h” /Screen-handing functions #include /Graphics functions void main() int gdriver,gmode; gdriver=VGA;/图形驱动程序是VGA gmode=VGAHI; /VGA高分辨率模式 initgraph( /图形的初始 化 closegraph();/关闭图形模式 9清华大学 黄维通 设计制作 【例】用line和lineto函数画三角形。 #include /Graphics functions #include /Screen-handing functions void main() int gd=DETECT,gm;/图形初始化 initgraph( line(0,0,639,240);/给定两点画线 getch(); lineto(320,479); /从当前位置到指定位置画线 getch(); lineto(639,240); getch(); closegraph(); 7.1.2常用图形函数 10清华大学 黄维通 设计制作 【例】用8个弧画完整的椭圆(其中每画一个弧后按任 意键画下一段弧线) #include #include void main() int s; int gd=DETECT,gm; initgraph( setbkcolor(4);/设置背景颜色 setcolor(10);/设置椭圆的颜色 for(s=0;s!=360;s+=45)/每45度一个弧 ellipse(300,200,s,s+45,250,100); getch(); /按任意键继续 closegraph(); 其它画弧函 数自己看书 上机实践 11清华大学 黄维通 设计制作 2 基本图形类函数的应用 void rectangle(int x1,int y1,int x2,int y2); void circle(int x,int y, int r); void drawpoly(int n, int xy2n); 画折线 折线的顶 点个数 存放n个 顶点坐标 画矩形 12清华大学 黄维通 设计制作 【例】画一个六边形 #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( drawpoly(n,xy); getch(); closegraph(); 13清华大学 黄维通 设计制作 3 屏幕管理类函数的应用 void setviewport(int x1,int y1,int x2,int y2,int clip); 设置视 图区 决定裁剪否。若clip=1 ,图形输出将只显示在 视图区内,超出部分被 自动裁剪掉。若clip=0 ,将不会被裁剪掉 14清华大学 黄维通 设计制作 void clearviewport(); 清除视图区内显示的内容 void cleardevice(); 清屏函数。文本模式下的清屏函数是 clrscr()。cleardevice的作用是清除屏 幕上的所有内容 void moveto(int x,int y); 把当前点定位于指定点(x,y) 15清华大学 黄维通 设计制作 【例】用各种线型演示矩形和圆 #include #include void main() int gd=DETECT,gm; initgraph( int i; unsigned int t=0; for(i=0;i #include void main() int gd=DETECT,gm; initgraph( setcolor(9); int i,j; for(i=0;i #include void main() int gd= DETECT,gm; initgraph( setbkcolor(1);/设置背景色 setcolor(2);/设置线条颜色 int i; 18清华大学 黄维通 设计制作 for(i=0;i #include #include void main() int gd=DETECT,gm; initgraph( printf(“tthe current graphics driver is %sn“,getdrivername();/获取驱动名称 20清华大学 黄维通 设计制作 printf(“tthe current graphics mode number is %dn“,getgraphmode();/获取显示模式 printf(“t the current graphics mode is %s“,getmodename(getgraphmode(); /获取指向当前显示模式的字符串的指针 getch(); closegraph(); 21清华大学 黄维通 设计制作 7 图形方式下的文本输出 void settextstyle(int font, int direction, int charsize); HORIZ_DIR=0 从左向右输出( 默认) VERT_DIR=0 从下向上输出 22清华大学 黄维通 设计制作 void outtext(char *string) void outtextxy(int x,int y,char *string); 函数outtext在当前位置按照 settextstyle中direction指定的方向输出 字符串指针string所指的字符串。 23清华大学 黄维通 设计制作 void settextjustify(int horiz,int vert) 在使用outtextxy进行文本输出时 ,字符串怎样根据(x,y)确定位置呢 ?具体地说,是把第一个字符定位于 (x,y)呢?还是把最后一个字符定位 于(x,y)呢?抑或是中间的呢? settextjustify函数解决了这个问题。 对齐方式 见教材 24清华大学 黄维通 设计制作 void sprintf(char *string,char *format,argument,); 图形方式下,outtext和outtextxy无 疑是最完善的输出方式。但是,这 两个函数的输出对象都是字符串。 那么,如果要输出变量的值应该如 何做?sprintf函数解决了这个问题 。 25清华大学 黄维通 设计制作 【例】利用改变字体大小和方向的方法实 现动画效果 #include #include #include #include void main() int gd=DETECT,gm; initgraph( setbkcolor(3);/设置背景颜色 setcolor(5);/设置字体颜色 26清华大学 黄维通 设计制作 int i,j,x,y; char a8; sprintf(a,“Hello!“); for(i=0;i #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; 31清华大学 黄维通 设计制作 int gd=DETECT,gm; initgraph( cleardevice(); setviewport(20,20,350,350,1); /设置视口区域 setbkcolor(15); /设置背景颜色 int n=10,i,j,x,y=300; moveto(80,y-a0);/移动画笔 for(i=1;i #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; /求三角形边的中点坐标 35清华大学 黄维通 设计制作 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,f,c,d,n-1); 36清华大学 黄维通 设计制作 void main() int n,xa=10,ya=10,xb=10,yb=470, xc=630,yc=470; /大三角形的三顶点 int gd=DETECT,gm; printf(“in nn“); scanf(“%d“, /输入递归层

温馨提示

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

评论

0/150

提交评论