趣味编程:抽象图(椭圆组成)

概述:本篇博客主要讲解由椭圆图案组合而成的抽象图形。

1.效果展示

该程序的实际运行是一个动态的效果,因此实际运行相较于博客图片更加灵动。

2.源码展示

复制代码
// 程序名称:椭圆组合而成的抽象图案

//
#include <graphics.h>
#include <conio.h>
#include <math.h>

const double PI = 3.1415926536;

// 四舍五入
int Round(double x)
{
	return (int)(x < 0 ? x - 0.5 : x + 0.5);
}

// 主函数
int main()
{
	// 初始化
	initgraph(640, 480);		// 创建绘图窗口
	setorigin(320, 240);		// 设置原点为屏幕中央

	double r = 58;
	double csin = sin(2 * PI / 200);
	double ccos = cos(2 * PI / 200);
	for (int j = 0; j < 100; j++, r -= 0.9)
	{
		double tsin = sin(2 * PI * j / 100);
		double tcos = cos(2 * PI * j / 100);
		double x = 0;
		double y = r;
		for (int i = 0; i < 200; i++)
		{
			double temp = x;
			x = x * ccos + y * csin;
			y = y * ccos - temp * csin;
			int scrx = Round(x * tcos + y * 4 * tsin);
			int scry = Round(y * 4 * tcos - x * tsin);
			putpixel(scrx, -scry, GREEN);
		}

		Sleep(20);
	}

	_getch();
	closegraph();
	return 0;
}

3.逻辑概述

这段程序使用EasyX 图形库 绘制了一个由椭圆组合而成的抽象图案。程序主要逻辑如下:

  1. 初始化部分:

    • 创建 640×480 像素的绘图窗口
    • 将坐标系原点设置在窗口中央 (320,240)
  2. 核心绘制循环:

    • 外层循环控制椭圆的数量,共绘制 100 个椭圆
    • 每次循环椭圆半径递减,形成从外到内的动画效果
  3. 椭圆绘制算法:

    • 内层循环通过参数方程生成椭圆上的点
    • 使用旋转矩阵计算点的位置
    • 每个椭圆都有不同的旋转角度和离心率
    • 通过正弦余弦函数控制椭圆的变形和旋转
  4. 动画效果:

    • 随着半径减小,不断绘制新的椭圆
    • 每次绘制后延时 20 毫秒,形成动画效果
    • 所有椭圆使用绿色像素绘制
  5. 收尾操作:

    • 等待用户按键
    • 关闭图形窗口

这个程序的数学原理是通过参数方程和旋转矩阵生成椭圆轨迹,外层循环控制椭圆的大小和旋转角度,内层循环控制点的分布。通过这种方式,最终形成了一个由多个嵌套椭圆组成的抽象图案,并且带有平滑的动画效果。

4.小结

以上便是本篇博客的所有内容了,如果诸君学到EasyX绘图的便利与使用,还请给博主点点赞!!!

相关推荐
octopus_c37 分钟前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
青少儿编程课堂40 分钟前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
j7~1 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_11191 小时前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++
码匠许师傅1 小时前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
ShineWinsu2 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
Lhan.zzZ2 小时前
用 Qt 构建线程安全的通讯静态库:从线程亲和性到完整工程
c++·vscode·qt·tcp/ip·udp
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型
fpcc2 小时前
跟我学c++中级篇—streambuf在glog中的应用分析
开发语言·c++
码匠许师傅2 小时前
【C++三方组件】OpenCV:计算机视觉的事实标准
c++