C语言结合EasyX库绘制足球图案

青禾
青禾
发布时间:2026-10-15| 5人浏览过
原创

在 Windows 桌面开发中,C/C++ 经常需要调用图形库来绘制简单的几何图案或游戏素材。本文以 C 语言结合 EasyX 库为例,讲解如何通过三角函数(cos/sin)计算出多边形顶点坐标,并利用循环旋转和坐标映射绘制出类似足球的黑白纹理图案。内容涵盖核心思路解析、运行截图展示以及完整源码参考。

实现思路

足球的二维平面投影主要由若干个正五边形(通常为黑色)和正六边形(通常为白色)拼接而成。在使用 EasyX 绘图时,为了简化逻辑并保证图形的对称性,可以采用以下核心步骤:

  1. 确定中心与背景:初始化一个窗口,设定圆心位置和半径,通常先绘制一个大的圆形作为球体的外轮廓或基底。
  2. 计算顶点坐标:利用三角函数公式 $x = r \cdot \cos(\theta)$ 和 $y = r \cdot \sin(\theta)$,根据角度和半径计算出各层级多边形的顶点坐标。
  3. 构建几何层级:
    • 最内层为核心五边形的顶点。
    • 中间层为连接这些五边形的辅助点集合(如十边形顶点)。
    • 最外层为球体边缘的轮廓点集合。
  4. 连线与填充:按照特定规律连接上述点集形成封闭路径,利用 solidpolygon 填充黑色多边形,再用 line 绘制白色区域的边界线条。

开发环境配置

本示例基于 Microsoft Visual Studio 开发环境,使用前请确保已安装 EasyX 库并在项目中正确包含头文件。建议编译工具版本不低于 VS 2013,EasyX 版本建议在 20200315 (beta) 或以上,以获得更稳定的兼容性。

完整源码解析

下面提供一段可直接运行的 C++ 代码。该代码演示了如何定义多个点数组,通过偏移初始角度来获取不同半径上的均匀分布点,最后通过线段连接完成“足球”外观。

#include <graphics.h>
#include <math.h>
#include <conio.h>
#define PI acos(-1.0)

int main()
{
    // 1. 初始化图形窗口
    initgraph(640, 480);
    setbkcolor(GREEN);     // 设置背景色
    setlinecolor(BLACK);   // 默认画笔颜色
    cleardevice();         // 清除屏幕
    
    // 2. 绘制基础球体轮廓
    setlinestyle(PS_SOLID, 4);
    setfillcolor(WHITE);   // 填充底色为白色
    fillcircle(320, 240, 150); // 以(320,240)为中心,半径150画实心圆

    // 3. 计算并绘制核心五边形及其关联结构
    setlinestyle(PS_SOLID, 2);
    POINT pts[5];   // 核心黑五边形顶点
    POINT Zpts[5];  // 中间层过渡点
    POINT Fpts[5];  // 填充确认点(用于确保内部无孔洞)
    
    double a = PI / 2; // 初始角度设为90度(顶部起点)
    for (int i = 0; i < 5; i++)
    {
        // 计算半径为60的点
        pts[i].x = int(320 + cos(a) * 60);
        pts[i].y = int(240 - sin(a) * 60);
        
        // 计算半径为100的点
        Zpts[i].x = int(320 + cos(a) * 100);
        Zpts[i].y = int(240 - sin(a) * 100);
        
        // 计算半径为110的点
        Fpts[i].x = int(320 + cos(a) * 110);
        Fpts[i].y = int(240 - sin(a) * 110);
        
        a += PI * 2 / 5; // 步进72度
    }
    
    // 填充中心黑色五边形
    setlinecolor(BLACK);
    setfillcolor(BLACK);
    solidpolygon(pts, 5);
    
    // 从中心五边形向外辐射线条到Zpts层
    for (int i = 0; i < 5; i++)
    {
        line(pts[i].x, pts[i].y, Zpts[i].x, Zpts[i].y);
    }
    
    // 4. 计算并处理外圈复杂连线
    POINT Spts[10];  // 第二层节点数组(对应10个位置)
    POINT Wpts[20];  // 最外层节点数组(对应20个位置)
    
    // 计算Wpts:20个点,覆盖360度,步长为18度 (PI/10),起始偏移增加半步
    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;
    }
    
    // 计算Spts:10个点,步长为36度 (PI/5),起始偏移调整以便对应
    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;
    }
    
    // 连线策略:将中间的Zpts与Spts进行交错连线
    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++;
    }
    
    // 连接相邻的Spts点形成环
    for (int i = 0; i < 9; i++)
    {
        line(Spts[i].x, Spts[i].y, Spts[i + 1].x, Spts[i + 1].y);
        i++; // 跳过下一个,因为前面已经连过了或者为了保持奇偶对应
    }
    
    // 将最外层Wpts与Spts相连
    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++;
        }
    }
    
    // 5. 最终修饰
    polygon(Wpts, 20); // 勾勒最外圈的形状
    setlinestyle(PS_SOLID, 3);
    circle(320, 240, 150); // 重新描一遍外围圆圈以防遗漏
    
    // 使用floodfill进行二次确认填充,防止抗锯齿导致的边缘毛刺
    setfillcolor(BLACK);
    for (int i = 0; i < 5; i++)
    {
        floodfill(Fpts[i].x, Fpts[i].y, BLACK);
    }
    
    _getch(); // 等待按键
    closegraph(); // 关闭窗口
    return 0;
}

关键参数说明

  • 320, 240:窗口的几何中心坐标,所有计算均以此点为原点进行偏移。
  • 150:球体的最大半径,决定了整个图案的大小。
  • a = PI / 2:控制图形的起始朝向,设置为 90 度可以让第一个顶点位于正上方。
  • setlinestyle:不同的线宽有助于区分图案的边缘,使视觉效果更清晰。

以上就是C语言结合EasyX库绘制足球图案的详细内容,更多关于C语言EasyX绘制几何图形的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。