ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:19.27KB ,
资源ID:9360633      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9360633.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言中的画图函数终审稿.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言中的画图函数终审稿.docx

1、C语言中的画图函数终审稿 公司内部档案编码:OPPTR-OPPT28-OPPTL98-OPPNN08C语言中的画图函数C语言中的画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。、画点 . 画点函数 void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。 在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从

2、上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。 关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。II、有关坐标位置的函数?int far getmaxx(void);返回x轴的最大值。 int far getmaxy(void); 返回y轴的最大值。 int far getx(void); 返回游标在x轴的位置。 void far gety(void); 返回游

3、标有y轴的位置。 void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。 void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。 、画线 I. 画线函数 TURBO C提供了一系列画线函数,下面分别叙述:void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。 void far lineto(int x, int y); 画一作从现行游标到点(

4、x, y)的直线。 void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。 void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。 void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。 在TURBO C中规定x轴正向为0 度,逆时针方向

5、旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时, 画出一个完整的椭圆。 void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下

6、角画一个矩形框。void far drawpoly(int numpoints, int far *polypoints); 画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2 倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。 下面举一个用drawpoly()函数画箭头的例子。 #include #include int main() int gdriver, gmod

7、e, i; int arw16=200,102,300,102,300,107,330, 100,300,93,300,98,200,98,200,102; gdriver=DETECT; initgraph(&gdriver, &gmode, c:caicbgi); setbkcolor(BLUE); cleardevice(); setcolor(12); /*设置作图颜色*/ drawpoly(8, arw); /*画一箭头*/ getch(); closegraph(); return 0; II、设定线型函数 在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,

8、但TURBO C 也提供了可以改变线型的函数。 线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。 下面介绍有关线型的设置函数。 void far setlinestyle(int linestyle,unsigned upattern,int thickness); 该函数用来设置线的有关信息,其中linestyle是线形状的规定,见下表。 有关线的形状(linestyle) 符号常数 数值 含义 SOLID_LINE 0 实线 DOTTED_LINE 1 点线 CENTER_LINE 2 中心线 DASHED_LINE 3 点画线 USERBIT_LINE 4

9、 用户定义线 thickness是线的宽度,见下表。 有关线宽(thickness) 符号常数 数值 含义 NORM_WIDTH 1 一点宽 THIC_WIDTH 3 三点宽 ? 对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表

10、中linesettingstype的结构如下: struct linesettingstype int linestyle; unsigned upattern; int thickness; 例如下面两句程序可以读出当前线的特性?struct linesettingstype *info; getlinesettings(info); void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操

11、作, 实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。 有关线型设定和画线函数的例子如下所示。 #include #include int main() int gdriver, gmode, i; gdriver=DETECT; initgraph(&gdriver, &gmode, c:caicbgi); setbkcolor(BLUE); cleardevice(); setcolor(GREEN); circle(320, 240, 98); setlinestyle(0, 0, 3); /*设置三点宽实线*/ setcolo

12、r(2); rectangle(220, 140, 420, 340); setcolor(WHITE); setlinestyle(4, 0xaaaa, 1); /*设置一点宽用户定义线*/ line(220, 240, 420, 240); line(320, 140, 320, 340); getch(); closegraph(); return 0; initgraph函数名: initgraph() 功 能: 初始化图形系统 函数原型: void far initgraph(int far *graphdriver, int far *graphmode, char far *pa

13、thtodriver);头文件: 程序例: #include #include int main(void) /* request auto detection */ int gdriver = DETECT, gmode, errorcode; /* initialize graphics mode */ initgraph(&gdriver, &gmode, ); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ prin

14、tf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); /* return with error code */ /* draw a line */ line(0, 0, getmaxx(), getmaxy(); /* clean up */ getch(); closegraph(); return 0; 绘图程序例下面的程序可以绘出如下三个图形:源程序如下:#include#include#include#define P1 180int gra

15、phdriver,graphmode;float rr,rs,n;void main() void snail(); void roundshell(); void ammonite(); clrscr(); gotoxy(1,6); printf(Plot your article graph. n); printf(=n); gotoxy(1,9); printf(Enter roundshell radius:); / 输入贝壳图半径 sanf(%f,&rr); printf(Enter snail radius:); / 输入蜗牛图半径 scanf(%f,&rs); printf(En

16、ter ammonite radius even:(2-6)n); / 输入菊石图半径 scanf(%f,&n); roundshell(); / 调用函数绘出贝売图 snail();/ 调用函数绘出蜗牛图 ammonite(); / 调用函数绘出菊石图 getch(); / 使图形停留在屏幕上 closegraph(); / 切换回到文本模式void roundshell() / 画贝壳图 int i,wx1,wx2,wy1,wy2,sx,sy; struct arccoordstype ArcInfo; float x1,x2,y1,y2,x,y,k1,k2,the,theta,r, mi

17、nx,maxx,miny,maxy,sx0,sy0,sxr,syr; the=2*Pi/60; / 角度增量 maxx=rr*cos(the*; / 赋初值 maxy=rr*sin(the*; / 赋初值 minx=rr*cos(the*; / 赋初值 miny=rr*sin(the*; / 赋初值 for(i=0;i=59;+i) the=2*Pi*i/60; x=rr*cos(the*; y=rr*sin(the*; if(xmaxx)maxx=x; / 求出最大x值 if(ymaxy)maxy=y; / 求出最大y值 x1=minx; / 窗口的左边界 x2=maxx; / 窗口的右边界

18、 y1=miny; / 窗口的下边界y2=maxy; / 窗口的上边界 wx1=56; / 视口的左边界 wx2=146; / 视口的右边界 wy1=56; / 视口的下边界 wy2=146;/ 视口的上边界 k1=(wx2-wx1)/(x2-x1); / 窗口到视口变换x方向的比例系数 k2=(wy2-wy1)/(y2-y1); / 窗口到视口变换y方向的比例系数 x=rr*cos(the*; y=rr*sin(the*; sxr=wx1+(x-x1)*k1; syr=wy1+(y-y1)*k2; sx0=wx1+(0-x1)*k1; sy0=wy1+(0-y1)*k2; r=sqrt(sx

19、r-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0) / 求画圆弧的半径 graphdriver=DETECT; initgraph(&graphdriver,&graphmode,bcbgi); setcolor(WHITE); rectangle(1,1,240,200); for(i=0;i=59;+i) theta=2*Pi*i/60; x=rr*cos(2*Pi-theta)*; / 用户坐标下,贝壳上一系列半圆圆心x坐标 y=rr*sin(2*Pi-theta)*; / 用户坐标下,贝壳上一系列半圆圆心y坐标 sx=wx1+(x-x1)*k1; / 转换成屏幕上

20、相应的半圆圆心x坐标 sy=wy1+(y-y1)*k2; / 转换成屏幕上相应的半圆圆心y坐标 setcolor(WHITE); arc(sx,sy,theta,theta+Pi,r); / 画出半圆 getarccoords(&ArcInfo); / 获取所画半圆端点的信息 line(sx,sy,; / 由半圆圆心到半圆弧起点画一线段 line(sx,sy,;/ 由半圆圆心到半圆弧终点画一线段 void snail() / 画蜗牛图 int i,wx1,wx2,wy1,wy2,theta,sx,sy; struct arccoordstype ArcInfo; float x1,x2,y1,

21、y2,x,y,k1,k2,sxr,syr, minx,maxx,miny,maxy,sx0,sy0,r; theta=2*Pi/60; maxx=rs*cos(theta+Pi)*; / 赋初值 maxy=rs*sin(theta+Pi)*; / 赋初值 minx=rs*cos(theta+Pi)*; / 赋初值 miny=rs*sin(theta+Pi)*; / 赋初值 for(i=0;imaxx) maxx=x; / 求窗口x方向最大值 if(ymaxy) maxy=y; / 求窗口y方向最大值 if(xminx) minx=x; / 求窗口x方向最小值 if(yminy) miny=y;

22、 / 求窗口y方向最小值 x1=minx; / 窗口左边界赋值 x2=maxx; / 窗口右边界赋值 y1=miny; / 窗口下边界赋值 y2=maxy; / 窗口上边界赋值 wx1=280; / 取定视口左边界 wx2=330; / 取定视口右边界 wy1=195; / 取定视口下边界 wy2=245; / 取定视口上边界 k1=(wx2-wx1)/(x2-x1); / 窗口到视口变换x方向的比例系数 k2=(wy2-wy1)/(y2-y1); / 窗口到视口变换y的比例系数 sx0=wx1+(0-x1)*k1; sy0=wy1+(0-y1)*k2; setcolor(WHITE); se

23、tfillstyle(0,0); bar3d(200,100,455,300,0,0); / 下面语句的注释见画贝壳函数roundshell()中相应的说明 theta=2*Pi*i/60; x=rs*cos(Pi-theta)*; y=rs*sin(Pi-theta)*; sxr=wx1+(x-x1)*k1; syr=wy1+(y-u1)*k2; sx=wx1+(x-x1)*k1; sy=wy1+(y-y1)*k2; setcolor(WHITE); r=sqrt(sxr-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0); arc(sx,sy,theta,theta+Pi

24、,r); getarccoords(&ArcInfo); line(sx,sy,; line,; rs=rs*; / 这里使半圆半径不断增大 void ammonite() / 画菊石图 int xasp,yasp; int i,wx1,wx2,wy1,wy2,theta,sx,sy; struct arccoordstype ArxInfo; / 这个结构类型在头文件中可以查到 float x1,x2,y1,y2,x,y,minx,maxx,sry,l,r,miny,maxy,k1,k2,aspr,sx0,sy0,sxr; getaspectratio(&xasp,&yasp); l=exp

25、*50); minx=l*cos*50); / 赋初值 miny=l*sin*50); / 赋初值 maxx=l*cos*50); / 赋初值 maxy=l*sin*50); / 赋初值 for(i=50;i=254;+i) l=exp*i) x=l*cos*i); y=l*sin*i); if(xmaxx) maxx=x;/ 求窗口x方向最大值 if(ymaxy) maxy=y;/ 求窗口y方向最大值 x1=minx; / 窗口左边界赋值 x2=maxx; / 窗口右边界赋值 y1=miny; / 窗口下边界赋值 y2=maxy; /窗口上边界赋值 wx1=460; / 取定视口左边界 wx

26、2=590; / 取定视口右边界 wy1=260; / 取定视口下边界 wy2=390; / 取定视口上边界 k1=(wx2-wx1)/(x2-x1);/ 变换比例 k2=(wy2-wy1)/(y2-y1);/ 变换比例 sx0=wx1+(0-x1)*k1; sy0=wy1+(0-y1)*k2; setcolor(WHITE); setfillstyle(0,0); bar3d(415,200,636,460,0,0); for(i=50;i=254;+i) l=exp*i); x=l*cos / 用户坐标下圆心x坐标 y=l*sin / 用户坐标下圆心y坐标 sxr=wx1+(x-x1)*k1; syr=wy1+(y-y1)*k2; sx=wx1+(x-x1)*k1; / 屏幕坐标下圆心x坐标 sy=wy1+(y-y1)*k2; / 屏幕坐标下圆心y坐标 r=sqrt(sxr-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0); r=r/n; / 画圆的半径 setcolor(WHITE); setfillstyle(0,0); / 设置填充图样 fillellipse(sx,sy,r,r*aspr); / 画填充圆

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1