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绘制足球内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言基于EasyX库实现有图形界面时钟

    本文实例为大家分享了C语言基于EasyX库实现有图形界面时钟的具体代码,供大家参考,具体内容如下 1.目标要求: 1.实现一个显示图像的时钟2.时间与本地时间一致 2.C语言代码: #include<graphics.h> //需要提前安装库函数EasyX,网上官网下载 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> #include<ma

  • C语言Easyx实现贪吃蛇详解

    目录 一.头文件包含 二.创建蛇与食物的结构体 三.游戏的初始化 四.游戏的绘画事件 五.蛇的移动事件 六.输入方向******这个方面没什么好解释的大家看代码应该可以看懂. 七.生成食物 八.吃食物 九.游戏失败的判定 十.main函数 总结: 一.头文件包含 #include<stdio.h> #include<graphics.h> //图形处理需要包含的库文件 #include<mmsystem.h> //windows多媒体接口 #include<con

  • c语言实现足球比赛积分统计系统

    本文实例为大家分享了c语言实现足球比赛积分统计系统的具体代码,供大家参考,具体内容如下 /* 足球比赛积分统计系统    作者:施瑞文    时间:2018.2 */   //为简单化,这里没有加上文件的操作  #include <stdio.h> #include <stdlib.h> #include <string.h> #include<windows.h> #include<conio.h> #define LEN sizeof(mat

  • C语言用easyx实现消砖块游戏

    本文项目为大家分享了C语言用easyx实现消砖块游戏的具体代码,供大家参考,具体内容如下 一.最终效果展示 效果图如下: 这个项目还是有很多的细节漏洞的.例如: 边界控制这里还是有点问题的. 二.绘制静态的挡板 代码如下: #include<conio.h> #include<graphics.h> #define High 480 //游戏画面尺寸 #define Width 640 //全局变量 int ball_x,ball_y;//小球的坐标 int ball_vx,bal

  • C语言+EasyX实现数字雨效果

    本文实例为大家分享了C语言 EasyX实现数字雨的具体代码,供大家参考,具体内容如下 ///////////////////////////////////////////////////////////////////// // 程序名称:数字雨 // 编译环境:VC6.0 EasyX // 作 者:flx413 // 时 间:2016-5-2 ///////////////////////////////////////////////////////////////////// #incl

  • C语言基于EasyX库实现有图形界面钟表

    本文实例为大家分享了C语言基于EasyX库实现有图形界面钟表的具体代码,供大家参考,具体内容如下 1.目标要求: 实现一个显示图像的时钟 2.C语言代码: #include<graphics.h> //需要提前下载EasyX库哦 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> #include<math.h> #define High

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

    目录 思路 截图 源码 思路 如何使用 C 语言配置EasyX绘图库绘制一个足球呢,今天我尝试了一下,难度还算可以,但是过程比较繁琐,代码写的有些复杂,后期有兴趣的,可以在我的代码的基础上进行优化,用更短的代码将这个图形绘制出来. 简单描述一下这个程序的思路和实现过程.足球是一个由五边形和六边形组成的球体.这里我使用一个旋转算法,首先确定一个足球的圆心.然后确定半径,通过等间距旋转,先获得一个五边形的坐标,使用多边形填充的方式,得到一个填充的五边形.然后通过同样的方式,获取一个十边形以及二十边形

  • 利用Go语言实现在终端绘制小兔子

    目录 前言 创作过程 小兔子模型制作 实现思路 代码 小结 前言 思来想去,使用 Go 语言创作,没有想到好的创意,最后打算在终端动态打印小兔子,给大家拜年! 先来看看效果图: 创作过程 小兔子模型制作 大部分的时间,都花在了画兔子图案的工作上.创建一个 txt 文档,在文档里通过特殊符号,一步一步将模型搭好,然后附上一副春节对联. 实现思路 整个动态过程是由几个不同的图案依次打印而成,一共有 7 个图案.起初我是将这 7 个图案放到 txt 文件里,然后通过读取文件,分割图案,最后打印图案,这

  • R语言利用ggplot2绘制QQ图和箱线图详解

    目录 绘制qq图 函数介绍 例子 绘制boxplot 函数介绍 例子 利用分位点绘制箱线图 将QQ图和箱线图进行融合 函数介绍 参数介绍 注意事项 例子 绘制qq图 在ggplot2中绘制qq图需要两步,geom_qq()将绘制样本分位点,geom_qq_line()将绘制标准正态线 函数介绍 geom_qq() geom_qq( mapping = NULL, data = NULL, geom = "point", position = "identity",

  • C语言基于EasyX绘制时钟

    本文实例为大家分享了C语言基于EasyX绘制时钟的具体代码,供大家参考,具体内容如下 函数说明: void line(     int x1,     int y1,     int x2,     int y2 ); 参数 x1直线的起始点的 x 坐标. y1直线的起始点的 y 坐标. x2直线的终止点的 x 坐标. y2直线的终止点的 y 坐标. 文件素材 源代码 #include <graphics.h> #include <conio.h> #include <mat

  • C语言借助EasyX实现的生命游戏源码

    本文讲述C语言借助EasyX实现的生命游戏,具体操作流程如下: 1.生命游戏内容: 该游戏包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的细胞的数量.如果一个细胞周围的活细胞数量多于 3 个,这个细胞会因为资源匮乏而在下一个时刻死去:如果一个位置周围有 3 个活细胞,则该位置在下一个时刻将诞生一个新的细胞:如果一个位置周围有 2 个活细胞,则该位置的细胞生死状态保持不变:如果一个细胞周围的活细胞少于 2 个,那么这个细胞会

  • Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- from turtle import * def HSB2RGB(hues): hues = hues * 3.59 #100转成359范围 rgb=[0.0,0.0,0.0] i = int(hues/60)%6 f = hues/

  • R语言利用barplot()制作条形图的各种实例

    前言 函数barplot()可以绘制条形图,其格式为 barplot(height) height是一个向量或者矩阵,使用horiz=TRUE可以生成一个水平的条形图, 例子 1,用条形图统计分类变量的频数 注意条形图常用来统计分类变量每一钟元素的频数,此时可以运用table()进行处理分类变量,其可以统计分类变量的各个元素的频次.处理后的结果为table格式而barplot()可以识别table格式 table()函数可以统计列各种元素出现的次数 counts <- table(Arthrit

  • R语言利用caret包比较ROC曲线的操作

    说明 我们之前探讨了多种算法,每种算法都有优缺点,因而当我们针对具体问题去判断选择那种算法时,必须对不同的预测模型进行重做评估. 为了简化这个过程,我们使用caret包来生成并比较不同的模型与性能. 操作 加载对应的包与将训练控制算法设置为10折交叉验证,重复次数为3: library(ROCR) library(e1071) library("pROC") library(caret) library("pROC") control = trainControl(

  • R语言数据可视化ggplot绘制置信区间与分组绘图技巧

    目录 1. 单组情况 1)构造数据集 2)绘制置信区间 2. 多组情况 方法1 1)构造数据集 2)绘制置信区间 方法2 1)构造数据集 2)绘制置信区间 3)美化 1. 单组情况 1)构造数据集 x <- 1:10 y <- x^2 ci_l <- x^2 - 0.5 * x ci_r <- x^2 + 0.5 * x dat_plot <- data.frame(x, y, ci_l, ci_r) 数据集长下面这样: x y ci_l ci_r 1 1 1 0.5 1.5

随机推荐