C语言利用EasyX实现绘制足球图案
思路
如何使用 C 语言配置EasyX绘图库绘制一个足球呢,今天我尝试了一下,难度还算可以,但是过程比较繁琐,代码写的有些复杂,后期有兴趣的,可以在我的代码的基础上进行优化,用更短的代码将这个图形绘制出来。
简单描述一下这个程序的思路和实现过程。足球是一个由五边形和六边形组成的球体。这里我使用一个旋转算法,首先确定一个足球的圆心。然后确定半径,通过等间距旋转,先获得一个五边形的坐标,使用多边形填充的方式,得到一个填充的五边形。然后通过同样的方式,获取一个十边形以及二十边形的坐标。然后按照一定规律连接这些坐标点。
以上只是我个人的思路,当然有更好的思路可以进行计算和绘制,例如足球是个球体,可以使用 EasyX 绘图库,通过计算每一个多边形角点在三维空间中的位置,就可以绘制出一个三维的足球。当然这个就需要有一定的数学逻辑能力和计算机图形学的知识了。
截图
源码
/// // 程序名称:绘制足球 // 编译环境:Mictosoft Visual Studio 2013, EasyX_20200315(beta) // #include<graphics.h> #include<math.h> #include<conio.h> #define PI acos(-1.0) int main() { initgraph(640, 480); setbkcolor(GREEN); setlinecolor(BLACK); cleardevice(); setlinestyle(PS_SOLID, 4); setfillcolor(WHITE); fillcircle(320, 240, 150); // 绘制一个球形状 setlinestyle(PS_SOLID, 2); POINT pts[5]; POINT Fpts[5]; POINT Zpts[5]; // 计算五边形的五个顶点坐标 double a = PI / 2; for (int i = 0; i < 5; i++) { pts[i].x = int(320 + cos(a) * 60); pts[i].y = int(240 - sin(a) * 60); Zpts[i].x = int(320 + cos(a) * 100); Zpts[i].y = int(240 - sin(a) * 100); Fpts[i].x = int(320 + cos(a) * 110); Fpts[i].y = int(240 - sin(a) * 110); a += PI * 2 / 5; } setlinecolor(BLACK); setfillcolor(BLACK); solidpolygon(pts, 5); for (int i = 0; i < 5; i++) { line(pts[i].x, pts[i].y, Zpts[i].x, Zpts[i].y); } POINT Spts[10]; POINT Wpts[20]; a = PI / 2 + PI / 20; for (int i = 0; i < 20; i++) { Wpts[i].x = int(320 + cos(a) * 150); Wpts[i].y = int(240 - sin(a) * 150); a += PI * 1 / 10; } a = PI / 2 + PI / 10; for (int i = 0; i < 10; i++) { Spts[i].x = int(320 + cos(a) * 128); Spts[i].y = int(240 - sin(a) * 128); a += PI * 1 / 5; } int P = 9; for (int i = 0; i < 5; i++) { line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y); P++; if (P == 10) { P = 0; } line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y); P++; } for (int i = 0; i < 9; i++) { line(Spts[i].x, Spts[i].y, Spts[i + 1].x, Spts[i + 1].y); i++; } int PS = 0; for (int i = 0; i < 20; i++) { if (i % 2 == 0) { if (PS % 2 == 0) { line(Wpts[i].x, Wpts[i].y, Spts[i / 2].x, Spts[i / 2].y); } else { line(Wpts[i + 1].x, Wpts[i + 1].y, Spts[i / 2].x, Spts[i / 2].y); } PS++; } } polygon(Wpts, 20); setlinestyle(PS_SOLID, 3); circle(320, 240, 150); setfillcolor(BLACK); for (int i = 0; i < 5; i++) { floodfill(Fpts[i].x, Fpts[i].y, BLACK); } _getch(); return 0; }
到此这篇关于C语言利用EasyX实现绘制足球图案的文章就介绍到这了,更多相关C语言EasyX绘制足球内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
c++之time_t和struct tm及时间戳的正确使用方式
C++中处理时间的常用数据类型有time_t和struct tm,time_t通常用来表示时间戳,即从1970年1月1日至今的秒数,struct tm是一个结构体,用来存储年、月、日、时、分、秒等信息,时间戳可以通过gmtime()转换为struct tm类型,反之亦然2024-10-10
最新评论