最小生成树-graphics动画设计
系列文章目录
1. 最小生成树三种方法的代码实现
2.最小生成树-graphics.h动画设计
目录
系列文章目录
前言
一、graphics.h是什么
二、使用步骤
1.创建项目
2.创建框架
3.具体函数使用方法
1)图形
2)字符
3)连线
4)其他函数
4.整体代码显示
5.注意说明
总结
前言
做数据结构的课设,选的课题为最小生成树,因为常规代码太简单了,工作量不够,就想着能不能用C语言做一个最小生成树的普利姆算法和克鲁斯卡尔算法的动画形态,上网查过资料后,发现网上对这一部分的讲解简直太少了,所以就打算出一期详细的介绍一下。
一、graphics.h是什么
想做动画首先要知道graphics.h这个库,那这个是什么呢,是TC的针对DOS下的一个C语言图形库,如果要用的话应该用TC的编译器来编译,VC++环境有其它的针对Windows的图形库。本文使用Dev-Cpp6.2.1版本。在C语言的编译软件中,感觉这一版的颜色配置很棒,把百度网盘里的连接和提取码附上。
链接:https://pan.baidu.com/s/1meDOyafrzjLdgyKesdE0JA
提取码:39ld
二、使用步骤
1.创建项目
打开dev,新建项目
先点击Multimedia,然后点击第二个Graphics.h库,选择C++语言,然后自己设定名称和项目文件夹,点击确定。会发现它的main.cpp文件里面本来就有一段代码,运行后会发现旋转五角星的图案(如下图所示),说明环境设置成功,接下来就可以写自己想写的代码了!
2.创建框架
首先要知道的是这个库跟一般的C/C++里面的函数基本上不太一样,下面的网站里对里面的库函数有详细的介绍。库函数目录 (xege.org)
按照下面的代码,先设置标题,窗口大小,暂停是为了让窗口停留住,不然就会一闪而过。这样一个简单的窗口就完成了。
#include <graphics.h>
#include <math.h>
#include <stdio.h>int main() {setcaption("Tree-1"); //标题initgraph( 640, 480 ); //窗口大小getch(); //暂停 return 0;
}
3.具体函数使用方法
本文介绍的函数仅为此次课设所用到的函数,具体的其他的函数可以参考此网站:库函数目录 (xege.org)
1)图形
以圆形为例,其他的图形可参考上面的库函数链接
circle(100,100,10): 第一个参数为横坐标,第二个为纵坐标,第三个参数为圆的直径
fillellipse(200,100,10,10): 第一个参数为横坐标,第二个为纵坐标,第三个为横向直径,第四个为纵向直径,若第三个和第四个数值不相等则为椭圆。
#include <graphics.h>
#include <math.h>
#include <stdio.h>int main() {setcaption("Tree-1"); //标题initgraph( 640, 480 ); //窗口大小getch();setcolor(EGERGB(255, 255, 255)); //设置画图的 线为白色 setfillcolor(EGERGB(255, 255, 0)); //涂色为黄色 circle(100, 100, 10); //空心圆 fillellipse(200, 100, 10, 10); //实心圆 getch();return 0;
}
所得的图形如下图所示:
2)字符
字符和字符串输出不饿能直接使用scanf(),而应该用outtextxy函数代替
outtextxy(100,100,'A'): 第一个参数为横坐标,第二个为纵坐标,A为字符。
#include <graphics.h>
#include <math.h>
#include <stdio.h>int main() {setcaption("Tree-1"); //标题initgraph( 640, 480 ); //窗口大小getch();setcolor(EGERGB(255, 255, 255)); //设置画图的 线为白色 setfillcolor(EGERGB(255, 255, 0)); //涂色为黄色 circle(100, 100, 10); //空心圆 outtextxy(100,100,'A'); //字符 getch(); fillellipse(200, 100, 10, 10); //实心圆 outtextxy(200,100,'1'); //字符 getch();char z[] = "The diagram has been generated!"; //字符串outtextxy(240, 400, z); //字符串表示getch(); return 0;
}
所得的图形如下:
3)连线
line(100,100,200,100): 第一个参数为线段起始点横坐标,第二个为七十点的纵坐标,第三个为结束点的横坐标,第四个为结束点的纵坐标。
#include <graphics.h>
#include <math.h>
#include <stdio.h>int main() {setcaption("Tree-1"); //标题initgraph( 640, 480 ); //窗口大小getch();setcolor(EGERGB(255, 255, 255)); //设置画图的 线为白色 setfillcolor(EGERGB(255, 255, 0)); //涂色为黄色 circle(100, 100, 10); //空心圆 outtextxy(100,100,'A'); //字符 getch(); fillellipse(200, 100, 10, 10); //实心圆 outtextxy(200,100,'1'); //字符 getch();line(100, 100, 200, 100); //连线getch();char z[] = "The diagram has been generated!";outtextxy(240, 400, z);getch(); return 0;
}
4)其他函数
sprintf(s, "%d", w[i]); //将w[i]中的值以整形数的形式存入到s变量上。
clearviewport(); //清屏
4.整体代码显示
这是整体的代码展示,其中数据是从文件中获取的,graphics.txt文件格式如下,
第一行书写顶点个数
第二行两个为一组,分别书写每个顶点的横纵坐标
第三行三个为一组,分别书写线段从第几个顶点到第几个顶点,以及两顶点之间的权值
tree1.txt和tree.1txt文件的格式如下:
两个为一组,分别书写从第几个顶点到第几个顶点。
整体的代码如下所示:
#include <graphics.h>
#include <math.h>
#include <stdio.h>int main() {int i;int t, k = 65, m, n; //t为顶点数 边数char tem; //换行符 空格int x[60], y[60]; //横坐标 纵坐标int a[60], b[60], w[60];int a1[60], b1[60];int a2[60], b2[60];char c[60]; //顶点字符char s[20]; //权值输出setcaption("Tree-1"); //标题initgraph( 640, 480 ); //窗口大小getch();setcolor(EGERGB(255, 255, 255)); //设置画图线为白色 setfillcolor(EGERGB(255, 255, 255));FILE *fp, *fp1, *fp2;fp = fopen("C:\\Users\\86151\\Desktop\\SmallestTree\\graphics.txt", "r");//顶点数fscanf(fp, "%d", &t);fscanf(fp, "%c", &tem); //跳过换行符//字符for (i = 1; i <= t; i++) {c[i] = k;k++;}for (i = 1; i <= t; i++) {//图横坐标fscanf(fp, "%3d", &x[i]);fscanf(fp, "%c", &tem);//图纵坐标fscanf(fp, "%3d", &y[i]);fscanf(fp, "%c", &tem); //跳过换行符}i = 1;while (!feof(fp)) {//连接关系的第一个fscanf(fp, "%2d", &a[i]);fscanf(fp, "%c", &tem);//连接关系的第二个fscanf(fp, "%2d", &b[i]);fscanf(fp, "%c", &tem);//树权值fscanf(fp, "%2d", &w[i]);fscanf(fp, "%c", &tem);i++;}m = i - 1; //边的总数getch();//顶点circle(x[1], y[1], 10); //圆圈outtextxy(x[1], y[1], c[1]); //顶点字符getch();for (i = 2; i <= t; i++) {circle(x[i], y[i], 10);outtextxy(x[i], y[i], c[i]);getch();}//连线for (i = 1; i <= m; i++) {line(x[a[i]], y[a[i]], x[b[i]], y[b[i]]);getch();}//权值for (i = 1; i <= m; i++) {sprintf(s, "%d", w[i]);outtextxy((x[a[i]] + x[b[i]]) / 2, (y[a[i]] + y[b[i]]) / 2, s);getch();}char z[] = "The diagram has been generated!";outtextxy(240, 400, z);getch();/*最小生成树-prim----------------------------------------------------------------------*/fp1 = fopen("C:\\Users\\86151\\Desktop\\SmallestTree\\tree1.txt", "r");setcolor(EGERGB(153,51,250)); //设置画图线为紫色setfillcolor(EGERGB(153,51,250));i = 1;while (!feof(fp1)) {//连接关系的第一个fscanf(fp1, "%2d", &a1[i]);fscanf(fp1, "%c", &tem);//连接关系的第二个fscanf(fp1, "%2d", &b1[i]);fscanf(fp1, "%c", &tem);i++;}n = i - 1;//顶点getch();for (i = 1; i <= n; i++) {fillellipse(x[a1[i]], y[a1[i]], 10, 10); //圆圈getch();fillellipse(x[b1[i]], y[b1[i]], 10, 10);getch();line(x[a1[i]], y[a1[i]], x[b1[i]], y[b1[i]]);getch();}char u[] = "The prim-minimum spanning tree has been generated!";outtextxy(220, 400, u);getch();clearviewport(); //清屏 getch();fp2 = fopen("C:\\Users\\86151\\Desktop\\SmallestTree\\tree2.txt", "r");setcolor(EGERGB(255, 255, 255)); //设置画图线为白色 setfillcolor(EGERGB(255, 255, 255));//顶点circle(x[1], y[1], 10); //圆圈outtextxy(x[1], y[1], c[1]); //顶点字符for (i = 2; i <= t; i++) {circle(x[i], y[i], 10);outtextxy(x[i], y[i], c[i]);}//连线for (i = 1; i <= m; i++) {line(x[a[i]], y[a[i]], x[b[i]], y[b[i]]);}//权值for (i = 1; i <= m; i++) {sprintf(s, "%d", w[i]);outtextxy((x[a[i]] + x[b[i]]) / 2, (y[a[i]] + y[b[i]]) / 2, s);}getch();/*最小生成树-kelusi--------------------------------------------------------------*/setcolor(EGERGB(30,144,255)); setfillcolor(EGERGB(30,144,255));i = 1;while (!feof(fp2)) {//连接关系的第一个fscanf(fp2, "%2d", &a2[i]);fscanf(fp2, "%c", &tem);//连接关系的第二个fscanf(fp2, "%2d", &b2[i]) ;fscanf(fp2, "%c", &tem);i++;}m = i - 1;getch();for (i = 1; i <= m; i++) {line(x[a2[i]], y[a2[i]], x[b2[i]], y[b2[i]]);getch();fillellipse(x[a2[i]], y[a2[i]], 10, 10); //圆圈getch();fillellipse(x[b2[i]], y[b2[i]], 10, 10);getch(); }char v[] = "The krusal-minimum spanning tree has been generated!";outtextxy(220, 400, v);getch();fclose(fp);fclose(fp1);fclose(fp2);return 0;
}
结果如图所示:其中普利姆算法和克鲁斯卡尔算法有顺序体现。
5.注意说明
1) getch()函数在此为暂停函数,与字符串里面的getch()函数不兼容,所以在此库里面不能使用include <string.h>头文件,否则会报错。
2)本篇文章所使用的代码是上一篇文章代码的延续,其中所使用的文件在上一篇代码中已经生成,如果是先运行的上一篇文章《最小生成树三种方法的代码实现》,则文件格式是匹配的,不用再修改文件格式,如果是单独运行的这篇文章的代码,需要自行设置文件格式。
总结
以上就是C语言当中graphics.h库具体的操作了,希望能够帮助到大家!
最小生成树-graphics动画设计相关推荐
- 利用java多线程技术和图像显示技术来完成动画设计。
利用java多线程技术和图像显示技术来完成动画设计. package p2;import java.applet.Applet; import java.awt.Graphics; import ja ...
- 用c语言 在图形状态下 编动画,用C语言实坝图形动画设计.pdf
您所在位置:网站首页 > 海量文档  > 行业资料 > 水利工程 用C语言实坝图形动画设计.pdf2页 本文档一共被下 ...
- 影视动画设计有些SCI期刊推荐? - 易智编译EaseEditing
以下是几本影视动画设计方向的SCI期刊: ACM Transactions on Graphics: 该期刊是ACM(Association for Computing Machinery,美国计算机 ...
- android 动画设计,Android loading动画设计分析
Android loading动画设计分析 时间:2017-04-20 来源:Android开发学习网 android6.0上有了很炫酷的开机动画,实现原理是什么呢?今天我们就从Loading ...
- 转:基于Turbo C2.0 的动画设计的例子
#include<graphics.h> #include<stdlib.h> #include<stdio.h> #include<conio.h> ...
- Silverlight Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效...
原文:Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化.波感特效 当我们在进行Silverlight & Bl ...
- Silverlight Blend动画设计系列四:倾斜动画(SkewTransform)
Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平.垂直方向的倾斜变化动画效果.我们现实生活中的倾斜变化效果是非常常见的,比如翻书的纸张效果,关门开门的时候门缝 ...
- 三维动画属于计算机专业吗,三维动画设计专业属于文科还是理科
很多考生在选专业的时候对三维动画设计专业都不太了解,首先可以告诉大家,三维动画设计专业是理科专业,以下育路网小编根据2017大学生就业形势分析整理出三维动画设计专业基本信息及工资就业方向供大家参考. ...
- 蓝松短视频经验分享----抠图和动画设计
短视频处理LanSoEditor-SDK之抠图和动画设计 (此介绍,是在和我们客户长期广泛交流的基础上,总结出大部分的客户使用的方法.如果您有新的思路,也可采用,毕竟我们主要是设计架构. 注释:我们的 ...
最新文章
- @echo off是什么意思_参加CHANEL私享派对是什么体验?Lanvin头一次在中国办大秀??「每周时报」...
- Java_spark简单例子
- 从 npm 迁移至yarn
- 如何保证用户登陆时提交密码已经加密
- Curator实现分布式锁的基本原理-createsTheLock
- 在线学习在爱奇艺信息流推荐业务中的探索与实践
- 旧项目适配iphone6和iphone plus
- 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
- 第 132 章 Example
- 骁龙845重出江湖!iQOO Neo正式发布 售价1798元起
- 苹果官网以旧换新价格暴跌;戴威退出 ofo 法人代表及高管;TensorFlow 2.1.0 发布| 极客头条...
- windows中PLSQL/Developer、Oracle InstantClient的安装与配置
- mysql 分页_MySQL如何实现分页查询
- 微信小程序|小程序自定义底部导航栏
- 苏宁易购,淘宝网,京东商城,百万级价格数据海量抓取
- 林赛登《花花公子》后桃花旺 与神秘男车场约会_0
- Linux下oracle11Gr2(64位)安装说明
- win7添加固态硬盘--固态硬盘为C盘--原C盘变H盘--其他盘不变
- markdown(md)编辑 全部格式
- python找不到了_python包找不到
热门文章
- 在线心灵鸡汤情感短句文字
- 数据挖掘之KNN算法
- 如何避免自己写的代码成为别人眼中的一坨屎!
- 转行做程序员之前你应该考虑的三件事
- android 单元测试 assert,android单元测试AndroidTestCase
- java javax.mail pom_软件包javax.mail和javax.mail.internet不存在
- 堂堂中华网china.com上竟然全是垃圾小广告
- 【SSL 1534】森林冰火人(DP)
- 20200809腾讯产培笔试
- python uiautomator2 环境搭建和基本使用