图形学c语言sdf

更新时间:2023-08-27 16:57:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机图形学C语言图形程序设计基础

第三章C语言图形程序设计基础 3.1屏幕显示模式和坐标系 1.文本模式: DEF在屏模上只能显示文本的显示模式 历史原因 Turbo C的默认的显示模式是文本模式。

2.图形模式和点坐标 图形模式: DEF在屏幕上显示图形的方式,称为图形模式。 点坐标:屏幕是由像素点组成的,在图形模式下,屏 幕上每个像素的显示位置用点坐标来描述。

在图形模式下,以屏幕的左上角为坐标原点(0,0)水 平方向为x轴,垂直方向为y轴(0,0)

Max x

(0,0)

799

(10,4)

Max y

599

例:一个分辨率为800*600的分辨率的显示 屏(800列,600行)

3.图形系统的初始化

一个简单的图形程序 #include “graphics.h” // 图形函数库 #include “stdio.h” //标准输入输出函数库 #include

main() { int gdriver,gmode; detectgraph(&gdriver,&gmode) ; if(gdriver<0) exit(1) ;

“conio.h” //控制台输入输出

初始化图 形系统

initgraph(&gdriver,&gmode,"C:\\TURBOC2") ;

bar3d(100,200,300,400,10,1) ; getch(); closegraph(); }

图形 程序 关闭图 形系统

如何实现图形模式初始化? initgraph(int *gdriver,int *gmode,char *path) 作用:初始化图形系统,从磁盘装入一个 图形驱动程序并设置图形显示模式。

Void far detectgraph(int *gdriver,int *gmode)

作用:硬件检测,该函数用来检测图形适配器的类型。 关闭图形系统 Void far closegraph() 作用:关闭图形系统,释放图形驱动程序所占 的内存空间,使系统返回到文本模式。

3.2常用绘图函数简介

1.图形视口函数 -setviewport(left,top,right,bottom,clip) Clip:如果clip=1则超出视口的图形自动剪裁 例: setviewport(100,100,300,300,1) -clearviewport() 作用:清除图形视口中的图形 -getviewsetting(struct * info) 作用:返回当前视口的绝对坐标及剪裁标志。 问题:info该如何定义?

main()[运行viewport.c] { struct viewporttype info; int gdriver=DETECT ,gmode; initgraph(&gdriver,&gmode,"C:\\tc3\\BGI"); setcolor(4);//红色 setviewport(100,100,200,200,1);//将参数clip=0结果如何? circle(60,60,60); getviewsettings(&info); rectangle(0,0,info.right-info.left,info.bottom- info.top); getch(); clearviewport(); getch(); closegraph();}问题1:程序运行结果?如果该为circle(50,50,20)结果如 何?如果将circle(60,60,60)前移一行结果?

2屏幕位置函数 -getmaxx() 作用:返回当前图形模式下最大x坐标 -getmaxy() 作用:返回当前图形模式下最大x坐标 Getx() 作用:返回图形模式下当前位置的x坐标 Gety() 作用:返回图形模式下当前位置的

x坐标

- moveto(int x ,int y) 作用:将当前位置移到(x,y) 例:moveto(10,20) - moverel(int deltax,int deltay) 作用:相对移动函数 说明:deltax和deltay。表示相对移动位 置 问题:刚才使用moveto(10,20)将光标定 位在(10,20)上,即CP=(10,20)。如果 现在调用 moverel(-5,10)光标将在何处?

3.直线和线型函数 -line(int x1,int y1,int x2,int y2) 作用:-在指定的两点之间画直线 说明:当前光标依然在(x1,y1) lineto(int x,int y) -作用:从当前光标位置到(x,y)之间画一条直线

-linerel(int deltax,int deltay) 作用:从当前坐标以相对增量方式画直线 问题2:如果 CP(10,20) ; linerel(70,80) 应在哪两点之间画直线?

阅读程序,写出程序运行结果 例:#include "graphics.h" #include "stdio.h" main() { int cp_x, cp_y; int gdriver=DETECT ,gmode; initgraph(&gdriver,&gmode,"C:\\TURBOC2"); moveto(5,10); line(5,10,100,50); cp_x=getx(); cp_y=gety();

printf("the cp_x cp_y are %d %d",cp_x,cp_y); printf("\n") ; //回车 getch() ; moveto(100,50); lineto(100,100); cp_x=getx(); cp_y=gety(); printf("the cp_x cp_y is %d %d",cp_x,cp_y) ;// getch(); linerel(50,50); getch(); }

-setlinestyle(int style, int pattern ,int width) 作用:设置线型特征(P65) style参数:用来定义所画直线的类型 Width参数:用来指定所画直线的粗细 pattern参数:只有style=4(用户自定义)可用 来表示用户字定义的线型。一般情况 pattern=0 例:Setlinestyle(DOTTEN-LINE , 0 , 1)

线性代码说明代码0 1 2

代码名SOLID-LINE DOTTEN-LINE CENTER-LINE 实线 点线 中心线

说明

34

DASHED-LINE

虚线

线宽

USERBIT-LINE 用户定义的线

符号常量 NORM_WIDTH THICK_WIDTH

值 1 3

含义 1像素宽 3个像素宽

例:setlinestyle(SOLID-LINE , 0, 1)

setlinestyle(4 , 0xAAAA, 1) 1100 1100 1100 1100 1111 1111 1111 1111

pattern参数是16位二进制码,1:有像素用前景 色点显示;0:没有像素用背景色点表示。

void draw_line() {int i; for(i=0;i<4;i++) { setlinestyle(i,0,NORM_WIDTH); line(40,10*(i+1),100,10*(i+1)); setlinestyle(i,0,THICK_WIDTH); line(40,10*(i+1),100,10*(i+1)); } setlinestyle(4,0x99cc,THICK_WIDTH); line(40,50,100,50) ; setlinestyle (4,0xABCD,THICK_WIDTH); line(40,60,100,60) ; }

-Setwritemode(int mode) 作用:设置画线的输出模式 mode=COPY_PUT(0) 新画的线将覆盖屏幕上原有的图像 mode=XOR_PUT(1)

新画的线与旧线作异或,然后再向屏幕 输出

例: Midx=getmaxx()/2 Midy=getmay()/2 Setwritemode(XOR_PUT) Line(0,midy,midx,midy) Line(midx/2,midy,midx*3/2,midy) Setwritemode(COPY_PUT) Line(0,midy/2,midx,midy/2); L

ine(midx/2,midy/2,midx*3/2,midy /2)

本文来源:https://www.bwwdw.com/article/voji.html

Top