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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

VC60简单绘图说明.docx

1、VC60简单绘图说明第二章 VC6.0简单绘图说明许多学编程的都是从 C 语言开始入门的,而目前的现状是:有些学校以 Turbo C 为环境讲 C 语言,只是 Turbo C 的环境实在太老了,复制粘贴都很不方便。有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。 还有计算机图形学,这门课程的重点是绘图算法,而不是 Windows 编程。所以,许多老师不得不用 TC 教学,因为

2、 Windows 绘图太复杂了,会偏离教学的重点。新的图形学的书有不少是用的 OpenGL,可是门槛依然很高。要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个 EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:/1. 系统支持操作系统版本:Windows 2000 及以上系统。编译环境版本:Visual C+ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。2. 安装请先将下载的压缩包解压缩,然后执行 Setup.hta,并跟随提示安装。安装程序会检测已经安装的 VC 版本,并根据选择将对应的 .h

3、和 .lib 文件安装至 VC 的 include 和 lib 文件夹内。安装程序不会修改注册表或者本机的任何文件。如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到 VC 对应的 include 和 lib 文件夹内,或者将 include 和 lib 文件夹放到任意位置,然后修改 VC 中的 Lib 和 Include 的引用路径。3. 卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到 EasyX 的卸载项。如需卸载,请执行相应版本的 Setup.hta,并根据提示卸载4. 文件列表说明下载的压缩包里文件列表及对应说明如下:压缩包 include gr

4、aphics.h/* 程序需要引用的头文件*/ lib amd64 graphicsw.lib /* VC2008 / VC2010 MBCS 库文件(x64) */ graphicswu.lib/* VC2008 / VC2010 Unicode 库文件(x64) */ graphics.lib/* VC6 MBCS 库文件*/ graphicsu.lib /* VC6 Unicode 库文件*/ graphicsw.lib /* VC2008 / VC2010 MBCS 库文件(x86) */ graphicswu.lib/* VC2008 / VC2010 Unicode 库文件(x86

5、) */ EasyX_Help.chm/* 帮助文件*/ Setup.hta /* 安装程序项目依赖*/使用上,基本和 Turbo C 没太大区别。启动 Visual C+,创建一个控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用 graphics.h 头文件就可以了。来看一个简单例子:【例2-1】画一个圆。#include /* 就是需要引用这个图形库*/#include void main() initgraph(640, 480); /* 这里和 TC 略有区别*/ circle(200, 200, 100); /* 画圆,圆

6、心(200, 200),半径 100*/ getch(); /* 按任意键继续*/ closegraph(); /* 关闭图形界面*/TC绘图有不少区别的,比如颜色上,TC 只有 16 色,而这个库支持了真彩色。还有,这个库增加了鼠标、批量绘图、读取图片(点阵或矢量)等功能。2.1几个基本概念1. 颜色EasyX 使用 24bit 真彩色,不再支持调色板模式。表示颜色有以下几种办法:1) 用预定义颜色常量,如下表所示:常量值颜色常量值颜色BLACK0黑DARKGRAY0x545454深灰BLUE0xA80000蓝LIGHTBLUE0xFC5454亮蓝GREEN0x00A800绿LIGHTGRE

7、EN0x54FC54亮绿CYAN0xA8A800青LIGHTCYAN0xFCFC54亮青RED0x0000A8红LIGHTRED0x5454FC亮红MAGENTA0xA800A8紫LIGHTMAGENTA0xFC54FC亮紫BROWN0x0054A8棕YELLOW0x54FCFC黄LIGHTGRAY0xA8A8A8浅灰WHITE0xFCFCFC白表 21预定义颜色常量2) 用 16 进制的颜色表示,形式为:0xbbggrr (bb=蓝,gg=绿,rr=红)3) 用 RGB 宏合成颜色。详见 RGB。4) 用 HSLtoRGB、HSVtoRGB 转换其它色彩模型到 RGB 颜色。详见 HSLto

8、RGB、HSVtoRGB。以下是部分设置前景色的方法:setcolor(0xff0000);setcolor(BLUE);setcolor(RGB(0, 0, 255);setcolor(HSLtoRGB(240, 1, 0.5);2. 坐标在 EasyX 中,坐标分两种:逻辑坐标和物理坐标。1) 逻辑坐标逻辑坐标是在程序中用于绘图的坐标体系。坐标默认的原点在屏幕的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。坐标原点可以通过 setorigin() 函数修改;坐标轴方向可以通过 setaspectratio() 函数修改;缩放比例可以通过 setaspectratio() 函数修改

9、。在本书中,凡是没有注明的坐标,均指逻辑坐标。2) 物理坐标物理坐标是描述设备的坐标体系。坐标原点在屏幕的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。坐标原点,坐标轴方向,缩放比例都不能改变。3. 设备所谓“设备”,简单来说,就是绘图表面。在 EasyX 中,设备分两种,一种是默认的绘图窗口,另一种是 IMAGE 对象。通过 SetWorkingImage() 函数可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。2.2函数说明EasyX 函数共分以下几大类:1. 绘图环境相关函数;2. 颜色表示及相关函数;3. 绘制图形相关函数;4. 文字输

10、出相关函数;5. 图像处理相关函数;6. 鼠标相关函数;7. 其它函数。函数的详细说明详见附录A。2.3简单绘图【例2-2】实现一个简单绘图。#include /* 绘图库头文件,绘图语句需要*/#include /* 控制台输入输出头文件,getch()语句需要*/void main() initgraph(640, 480); /* 初始化640x480的绘图屏幕*/ line(200, 240, 440, 240); /* 画线(200,240) - (440,240) */ line(320, 120, 320, 360); /* 画线(320,120) - (320,360) */

11、getch(); /* 按任意键*/ closegraph(); /* 关闭绘图屏幕*/说明:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。2. getch实现按任意键功能,按任意键后,程序继续执行。否则,程序会立刻执行closegraph以至于看不到绘制的内容。【练习题】1) 用线条画出更多的图形,要求不少于10条直线,并熟悉调试过程。2.4常用的绘图语句1. 常用的绘图语句line(x1, y1, x2, y2); /* 画直线 (x1,y1)-(x2,y2),都是整型*/circle(x, y

12、, r); /* 画圆,圆心为(x,y),半径为r*/putpixel(x, y, c); /* 画点(x,y),颜色c*/还有很多,如画椭圆、圆弧、矩形、多边形,等等,请参考2.2节函数说明。2. 设置颜色setcolor(c); /* 设置绘图颜色,如setcolor(RED)设置为红色等*/常用的颜色常量可以用:BLACK 黑 DARKGRAY 深灰 BLUE 蓝 LIGHTBLUE 亮蓝 GREEN 绿 LIGHTGREEN 亮绿 CYAN 青 LIGHTCYAN 亮青 RED 红 LIGHTRED 亮红 MAGENTA 紫 LIGHTMAGENTA 亮紫 BROWN 棕 YELLOW

13、 黄 LIGHTGRAY 浅灰 WHITE 白3. 配出更多的颜色颜色除了前面写的16种以外,还可以自由配色。格式:RGB(r, g, b)r / g / b 分别表示红色、绿色、蓝色,范围都是0255。例如,RGB(255,0,0) 表示纯红色。红色和绿色配成黄色,因此 RGB(255,255,0) 表示黄色。嫌调色麻烦可以用画笔里面的调色试试,调好了以后直接将数值抄过来就行。例如,画两条红色浓度为200的直线,可以写:setcolor(RGB(200,0,0);line(100,100, 200,100);line(100,120, 200,120);4. 用数字表示颜色除了用RGB(r,

14、g,b)方式外,还可以用16进制表示颜色,格式:0xrrggbb例如,setcolor(0xff0000) 和 setcolor(RGB(255,0,0) 是等效的。5. 延时语句这个很简单 Sleep(n) 就可以表示 n 毫秒的延时。例如延时3秒,可以用 Sleep(3000);【练习题】1) 绘制更丰富的图形内容,不低于20行。2) 将延时语句适当的插入上一小节的练习题的代码中,看看执行效果。2.5结合流程控制语句来绘图1. 熟练使用循环语句来控制程序流程。【例2-3】使用for循环语句画10条直线。#include #include void main() initgraph(640,

15、 480); for(int y=100; y200; y+=10) line(100, y, 300, y); getch(); closegraph();【例2-4】修改一下循环的范围和间隔。#include #include void main() initgraph(640, 480); for(int y=0; y256; y+) setcolor(RGB(0,0,y); line(100, y, 300, y); getch(); closegraph();2. 熟练使用判断语句来控制程序流程。【例2-5】配合if语句,实现红色、蓝色交替画线。#include #include v

16、oid main() initgraph(640, 480); for(int y=100; y200; y+=10) if ( y/10 % 2 = 1) /* 判断奇数行偶数行*/ setcolor(RGB(255,0,0); else setcolor(RGB(0,0,255); line(100, y, 300, y); getch(); closegraph();【练习题】1) 画围棋棋盘。2) 画中国象棋的棋盘3) 画国际象棋的棋盘,看手册找到颜色填充语句,实现过期象棋棋盘的区块填充。2.6数学知识在绘图中的运用数学在绘图中起着重要作用。1. 绘一个全屏的渐变色问题例如,如果需要将

17、将0255的颜色和0479的y轴对应起来:c 表示颜色,范围0255y 表示y轴,范围0479于是:c / 255 = y / 479c = y / 479 * 255 = y * 255 / 479 说明:先算乘法再算除法可以提高精度。【例2-6】绘一个全屏的渐变色。#include #include void main() initgraph(640, 480); int c; for(int y=0; y480; y+) c = y * 255 / 479; setcolor(RGB(0,0,c); line(0, y, 639, y); getch(); closegraph();2.

18、 画一个圆形的渐变色问题首先,我们要用到圆形的基本公式:x*x + y*y = r*r;让弧度从02*3.14,然后需要根据弧度和半径算出(x,y),用pi表示圆周率;用r表示半径;用a表示弧度(小数);用c表示颜色。于是:x=r*cos(a)y=r*sin(a)c=a*255/(2*pi)【例2-7】画一个圆形的渐变色。#include #include #include void main() initgraph(640, 480); int c; double a; int x, y, r=200; for(a=0; aPI*2; a+=0.0001) x=(int)(r*cos(a)

19、+ 320 + 0.5); y=(int)(r*sin(a) + 240 + 0.5); c=(int)(a*255/(2*PI) + 0.5); setcolor(RGB(c,0,0); line(320, 240, x, y); getch(); closegraph();2.7实现简单动画所谓动画,其实是连续显示一系列图形而已。结合到程序上,我们需要以下几个步骤:1. 绘制图像;2. 延时;3. 擦掉图像;循环以上即可实现动画。【例2-8】举一个例子,我们实现一条直线从上往下移动。#include #include void main() initgraph(640, 480); for

20、(int y=0; y480; y+) /* 绘制绿色直线*/ setcolor(GREEN); line(0, y, 639, y); Sleep(10); /* 延时*/* 绘制黑色直线(即擦掉之前画的绿线)*/ setcolor(BLACK); line(0, y, 639, y); closegraph();【例2-9】再看一个例子,实现一个圆从左往右跳动。#include #include void main() initgraph(640, 480); for(int x=100; x540; x+=20) /* 绘制黄线、绿色填充的圆 */ setcolor(YELLOW); s

21、etfillstyle(GREEN); fillcircle(x, 100, 20); Sleep(500); /* 延时*/ /* 绘制黑线、黑色填充的圆*/ setcolor(BLACK); setfillstyle(BLACK); fillcircle(x, 100, 20); closegraph();说明:移动的间距小、延时短,动画就会越细腻。但当画面较复杂时,会带来画面的闪烁。【练习题】1) 绘制一个沿 45 度移动的球,碰到窗口边界后反弹。2.8捕获按键,实现动画的简单控制最常用的一个捕获按键的函数:getch();前几课,都把这个函数当作“按任意键继续”来用,现在我们用变量保存

22、这个按键:char c = getch();然后再做判断即可。不过程序执行到 getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:kbhit()这个函数返回当前是否有用户按键,如果有,再用 getch() 获取即可,这样是不会阻塞的。即:char c;if (kbhit()c = getch();【例2-10】如果有按键,就输出相关按键。否则,输出“.”。每隔 100 毫秒输出一次。按 ESC 退出。注:ESC 的 ASCII 码是 27。#include #include #include void ma

23、in() char c = 0; while(c != 27) if (kbhit() c = getch(); else c = .; printf(%c, c); Sleep(100); 结合上一课的简单动画,就可以做出来靠按键移动的图形了。【例2-11】实现 a s 控制圆的左右移动。#include #include void main() initgraph(640, 480); int x = 320; /* 画初始图形*/ setcolor(YELLOW); setfillstyle(GREEN); fillcircle(x, 240, 20); char c; while(c

24、!= 27) /* 获取按键*/ c = getch(); /* 先擦掉上次显示的旧图形*/ setcolor(BLACK); setfillstyle(BLACK); fillcircle(x, 240, 20); /* 根据输入,计算新的坐标*/ switch(c) case a: x-=2; break; case d: x+=2; break; case 27: break; /* 绘制新的图形*/ setcolor(YELLOW); setfillstyle(GREEN); fillcircle(x, 240, 20); /* 延时*/ Sleep(10); closegraph()

25、;【练习题】请继续完成这个程序,实现以下功能: 1) 上下的控制; 2) 边界检测; 3) 结合 kbhit 实现惯性移动(即按一下方向键,圆就会一直向这个方向移动) 注:上下左右等按键的控制,会返回 2 个字符。由于该系列教程面向初学者,因此有兴趣的请查看 MSDN。2.9用函数简化相同图案的制作实际中有许多类似的图案,如果一一单独绘制,太麻烦。于是,我们需要一个公用的绘制过程,就是函数。例如,我们需要画5个三角形,位于不同的位置。我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。然后,在需要绘制的时候,调用这个函数即可。可以通过参数来解决细微差异(图案的

26、坐标、颜色等)。【例2-12】画5个位于不同位置的三角形。#include #include /* 在坐标 (x,y) 处,用颜色 c 绘制三角形*/void sanjiaoxing(int x, int y, int c) /* 设置画线颜色*/ setcolor(c); /* 画三角形的三条边*/ line(x, y, x+50, y); line(x, y, x, y+50); line(x+50, y, x, y+50);void main() initgraph(640, 480); /* 初始化图形窗口*/ sanjiaoxing(100, 100, RED); sanjiaoxi

27、ng(120, 160, BLUE); sanjiaoxing(140, 220, GREEN); sanjiaoxing(160, 120, BLUE); sanjiaoxing(160, 160, GREEN); sanjiaoxing(220, 140, GREEN); getch(); /* 按任意键继续*/ closegraph(); /* 关闭图形窗口*/【例2-13】结合循环等控制条件,绘制更复杂漂亮的图案。#include #include void sanjiaoxing(int x, int y, int color) /* 设置画线颜色*/ setcolor(color)

28、; /* 画三角形的三条边*/ line(x, y, x+10, y); line(x, y, x, y+10); line(x+10, y, x, y+10);void main() initgraph(640, 480); /* 初始化图形窗口*/ for(int x=0; x640; x+=10) for(int y=0; y480; y+= 10)sanjiaoxing(x, y, RGB(x*255/640, y*255/480, 0); getch(); /* 按任意键继续*/ closegraph(); /* 关闭图形窗口*/运行效果如下图:图21运行效果图【练习题】1) 绘制 Windows 自带游戏“扫雷”的初始界面。2.10绘图中的位运算位运算和绘图有什么关系?先

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

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