cpp
#include <easyx.h>
#include <cmath>
#include<stdio.h>
#define WIN_WIDTH 800
#define WIN_HEIGHT 800
int main()
{
// 初始化图形界面
initgraph(WIN_WIDTH, WIN_HEIGHT);
setbkcolor(WHITE);
cleardevice();
// 开启双缓冲
// BeginBatchDraw();
// 设置颜色变化参数
int amplitude = 128;
double frequency = 0.02;
double phase = 0;
// 动画循环
for (int i = 360; i>0 ; i--)
{
// 计算当前角度的正弦值
double sinValueR = sin(i * frequency + phase);
double sinValueG = sin(i * 2 * frequency + phase);
double sinValueB = sin(i * 3 * frequency + phase);
// 根据正弦值计算RGB颜色分量
int r = static_cast<int>(255 * (1 + sinValueR));
int g = static_cast<int>(255 * (1 + sinValueG));
int b = static_cast<int>(255 * (1 + sinValueB));
// 设置线条和填充颜色
setlinecolor(RGB(r, g, b));
setfillcolor(RGB(r, g, b));
Sleep(10);
// 在屏幕中心绘制填充圆
fillcircle(WIN_WIDTH / 2, WIN_HEIGHT / 2, i);
}
// 结束双缓冲,并交换缓冲区,将后缓冲区内容显示到屏幕上
//EndBatchDraw();
// 关闭图形界面
//closegraph();
getchar();
return 0;
}
这是一个简单的C++程序,用于在一个图形界面上展示一个彩色的动画效果。程序使用了EasyX图形库,这是一个在Windows平台上用于简化图形编程的库。
程序的主要步骤如下:
- 初始化图形界面 :使用
initgraph()
函数初始化一个800x800像素的窗口,并设置背景颜色为白色。 - 设置颜色变化参数 :定义了三个变量
amplitude
(振幅)、frequency
(频率)和phase
(相位),这些变量将用于计算RGB颜色分量。 - 动画循环 :在一个从360递减到1的循环中,程序计算了三个正弦值
sinValueR
、sinValueG
和sinValueB
,分别对应RGB三个颜色通道。然后,根据这些正弦值计算RGB颜色分量,并设置线条和填充颜色。 - 绘制填充圆 :使用
fillcircle()
函数在屏幕中心绘制一个填充圆,圆的半径由循环变量i
决定。每次循环,圆的半径都会减小。 - 暂停和颜色变化 :
Sleep(10)
函数使程序暂停10毫秒,这样就可以看到圆的颜色在变化。由于正弦函数的周期性,颜色会在循环中周期性地变化。 - 结束:程序最后会等待用户输入一个字符,然后退出。
需要注意的是,虽然代码中包含了双缓冲(BeginBatchDraw()
和EndBatchDraw()
)和关闭图形界面(closegraph()
)的函数调用,但这些行都被注释掉了。如果你想要使用双缓冲或关闭图形界面,需要取消这些行的注释。
另外,这个程序需要在支持EasyX图形库的Windows环境下编译和运行。如果你没有安装EasyX库,你需要先下载并安装它,或者将程序中的图形相关代码替换为其他图形库(如OpenCV、SFML等)的代码。