C语言利用EasyX实现绘制足球图案

 更新时间:2022年11月23日 14:41:41   作者:编程小鱼六六六  
这篇文章主要为大家详细介绍了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语言函数传递数组和传递地址的区别你知道吗

    C语言函数传递数组和传递地址的区别你知道吗

    这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
    2021-09-09
  • C语言代码实现三子棋游戏

    C语言代码实现三子棋游戏

    这篇文章主要为大家详细介绍了C语言代码实现三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++ 自由存储区是否等价于堆你知道吗

    C++ 自由存储区是否等价于堆你知道吗

    自由存储是C++中通过new与delete动态分配和释放对象的抽象概念,而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存
    2021-08-08
  • C++构造函数+复制构造函数+重载等号运算符调用

    C++构造函数+复制构造函数+重载等号运算符调用

    这篇文章主要介绍了C++构造函数+复制构造函数+重载等号运算符调用,文章叙述详细,具有一定的的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • C++实现T型插补详解

    C++实现T型插补详解

    这篇文章主要介绍了C++实现T型插补,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • C++详解Primer文本查询程序的实现

    C++详解Primer文本查询程序的实现

    这个程序还是比较复杂的,把这句话作为文章的开头可以看出它的真实性.....这篇文章主要介绍了文本查询程序的实现,下面我们一起来看看
    2022-06-06
  • C++ 反射机制详解及实例代码

    C++ 反射机制详解及实例代码

    这篇文章主要介绍了C++ 反射机制详解及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • c++基础语法:构造函数与析构函数

    c++基础语法:构造函数与析构函数

    构造函数用来构造一个对象,主要完成一些初始化工作,如果类中不提供构造函数,编译器会默认的提供一个默认构造函数(参数为空的构造函数就是默认构造函数) ;析构函数是隐式调用的,delete对象时候会自动调用完成对象的清理工作
    2013-09-09
  • C++中的字符串编码处理方法

    C++中的字符串编码处理方法

    这篇文章主要介绍了C++中的字符串编码处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • c++之time_t和struct tm及时间戳的正确使用方式

    c++之time_t和struct tm及时间戳的正确使用方式

    C++中处理时间的常用数据类型有time_t和struct tm,time_t通常用来表示时间戳,即从1970年1月1日至今的秒数,struct tm是一个结构体,用来存储年、月、日、时、分、秒等信息,时间戳可以通过gmtime()转换为struct tm类型,反之亦然
    2024-10-10

最新评论