网站做编辑器,建设网站基础,jsp ajax网站开发典型实例pdf,2023前端开发的就业现状目录 1.效果展示
2.源码展示
3.代码逻辑详解
3.1 头文件与宏定义
3.2 HSV函数转RGB颜色函数 3.3 主函数
初始化部分
循环部分
线条绘制部分
刷新和延时部分
结束部分
4.小结 本篇博客主要介绍趣味编程用C语言实现万花筒小程序。 1.效果展示 2.源码展示
#define…目录 1.效果展示
2.源码展示
3.代码逻辑详解
3.1 头文件与宏定义
3.2 HSV函数转RGB颜色函数 3.3 主函数
初始化部分
循环部分
线条绘制部分
刷新和延时部分
结束部分
4.小结 本篇博客主要介绍趣味编程用C语言实现万花筒小程序。 1.效果展示 2.源码展示
#define _CRT_SECURE_NO_WARNINGS
#include graphics.h
#include conio.h
#include math.h#define PI acos(-1.0)
#define NUM_LINES 36 // 线条数量
#define BASE_RADIUS 250 // 基础半径// HSV转RGB颜色函数
COLORREF MHSVtoRGB(float H, float S, float V) {float C V * S;float X C * (1 - fabs(fmod(H / 60.0, 2) - 1));float m V - C;float r, g, b;if (H 0 H 60) { r C; g X; b 0; }else if (H 60 H 120) { r X; g C; b 0; }else if (H 120 H 180) { r 0; g C; b X; }else if (H 180 H 240) { r 0; g X; b C; }else if (H 240 H 300) { r X; g 0; b C; }else { r C; g 0; b X; }return RGB((r m) * 255, (g m) * 255, (b m) * 255);
}int main() {// 初始化图形窗口initgraph(800, 600);setbkcolor(BLACK);cleardevice();int cx getwidth() / 2; // 中心X坐标int cy getheight() / 2; // 中心Y坐标float angle 0.0f; // 全局旋转角度float hue 0.0f; // 颜色色相值// 启用批量绘制防闪烁BeginBatchDraw();while (!_kbhit()) { // 按任意键退出cleardevice();// 更新全局参数angle 0.005f;hue 0.5f;if (hue 360) hue - 360;// 绘制所有线条for (int i 0; i NUM_LINES; i) {// 计算当前线条角度偏移float offset i * (2 * PI / NUM_LINES);// 计算动态半径带波动效果float radius BASE_RADIUS * (1 0.2f * sin(angle * 3 offset));// 计算起点和终点坐标float startAngle angle offset;float endAngle startAngle PI / 2; // 终点角度偏移90度int x1 cx radius * cos(startAngle);int y1 cy radius * sin(startAngle);int x2 cx (radius * 0.6f) * cos(endAngle);int y2 cy (radius * 0.6f) * sin(endAngle);// 设置线条颜色HSV色彩空间渐变setlinecolor(MHSVtoRGB(fmod(hue i * 10, 360), 0.8f, 1.0f));// 绘制线条line(x1, y1, x2, y2);}// 刷新批量绘制FlushBatchDraw();Sleep(10);}// 关闭图形窗口EndBatchDraw();closegraph();return 0;
}3.代码逻辑详解
3.1 头文件与宏定义
#define _CRT_SECURE_NO_WARNINGS
#include graphics.h
#include conio.h
#include math.h#define PI acos(-1.0)
#define NUM_LINES 36 // 线条数量
#define BASE_RADIUS 250 // 基础半径
#define _CRT_SECURE_NO_WARNINGS这是为了屏蔽 Visual Studio 中一些不安全函数的警告。#include graphics.h引入 EasyX 图形库的头文件该库用于实现图形绘制。#include conio.h引入控制台输入输出库其中的 _kbhit() 函数可用于检测是否有按键输入。#include math.h引入数学库使用其中的数学函数如 sin()、cos() 等。PI定义圆周率。NUM_LINES设定要绘制的线条数量。BASE_RADIUS设定线条绘制的基础半径。
3.2 HSV函数转RGB颜色函数
// HSV转RGB颜色函数
COLORREF MHSVtoRGB(float H, float S, float V) {float C V * S;float X C * (1 - fabs(fmod(H / 60.0, 2) - 1));float m V - C;float r, g, b;if (H 0 H 60) { r C; g X; b 0; }else if (H 60 H 120) { r X; g C; b 0; }else if (H 120 H 180) { r 0; g C; b X; }else if (H 180 H 240) { r 0; g X; b C; }else if (H 240 H 300) { r X; g 0; b C; }else { r C; g 0; b X; }return RGB((r m) * 255, (g m) * 255, (b m) * 255);
}
该函数的作用是把 HSV色相、饱和度、明度颜色空间的颜色转换为 RGB 颜色空间的颜色。H 代表色相取值范围是 0 到 360S 代表饱和度取值范围是 0 到 1V 代表明度取值范围是 0 到 1。依据 H 的不同区间计算出 r、g、b 的值最后将其转换为 RGB 颜色值。 3.3 主函数
int main() {// 初始化图形窗口initgraph(800, 600);setbkcolor(BLACK);cleardevice();int cx getwidth() / 2; // 中心X坐标int cy getheight() / 2; // 中心Y坐标float angle 0.0f; // 全局旋转角度float hue 0.0f; // 颜色色相值// 启用批量绘制防闪烁BeginBatchDraw();while (!_kbhit()) { // 按任意键退出cleardevice();// 更新全局参数angle 0.005f;hue 0.5f;if (hue 360) hue - 360;// 绘制所有线条for (int i 0; i NUM_LINES; i) {// 计算当前线条角度偏移float offset i * (2 * PI / NUM_LINES);// 计算动态半径带波动效果float radius BASE_RADIUS * (1 0.2f * sin(angle * 3 offset));// 计算起点和终点坐标float startAngle angle offset;float endAngle startAngle PI / 2; // 终点角度偏移90度int x1 cx radius * cos(startAngle);int y1 cy radius * sin(startAngle);int x2 cx (radius * 0.6f) * cos(endAngle);int y2 cy (radius * 0.6f) * sin(endAngle);// 设置线条颜色HSV色彩空间渐变setlinecolor(MHSVtoRGB(fmod(hue i * 10, 360), 0.8f, 1.0f));// 绘制线条line(x1, y1, x2, y2);}// 刷新批量绘制FlushBatchDraw();Sleep(10);}// 关闭图形窗口EndBatchDraw();closegraph();return 0;
}
初始化部分 initgraph(800, 600)初始化一个大小为 800x600 的图形窗口。setbkcolor(BLACK)把窗口背景颜色设置为黑色。cleardevice()清除当前绘图设备。cx 和 cy计算窗口的中心坐标。angle全局旋转角度初始值为 0。hue颜色色相值初始值为 0。BeginBatchDraw()开启批量绘制避免画面闪烁。 循环部分 while (!_kbhit())只要没有按键输入就持续循环。cleardevice()每次循环都清除绘图设备为绘制新画面做准备。angle 0.005f 和 hue 0.5f更新全局旋转角度和颜色色相值。if (hue 360) hue - 360确保色相值在 0 到 360 之间循环。 线条绘制部分 for (int i 0; i NUM_LINES; i)循环绘制所有线条。offset i * (2 * PI / NUM_LINES)计算每条线条的角度偏移。radius BASE_RADIUS * (1 0.2f * sin(angle * 3 offset))计算动态半径使线条有波动效果。startAngle 和 endAngle计算线条的起点和终点角度。x1、y1、x2、y2计算线条的起点和终点坐标。setlinecolor(MHSVtoRGB(fmod(hue i * 10, 360), 0.8f, 1.0f))设置线条颜色实现 HSV 色彩空间的渐变。line(x1, y1, x2, y2)绘制线条。 刷新和延时部分 FlushBatchDraw()刷新批量绘制将绘制的内容显示在窗口上。Sleep(10)延时 10 毫秒控制动画的速度。 结束部分 EndBatchDraw()结束批量绘制。closegraph()关闭图形窗口。 4.小结 以上便是本篇博客的所有内容如果大家觉得这篇博客能带来知识还请给博主点点赞。