C语言编写旋转太极图

教育   2024-10-23 23:18   宁夏  

效果

思路

编写一个程序并非一蹴而就之事,它要求程序员不断地积累经验,持续学习新知,深入思考,并勤于实践。无论程序的复杂度如何,都是程序员通过无数次的敲击键盘,一点一滴构建起来的。这样的过程,无疑需要时间的积累和沉淀。唯有不断学习,才能深刻体会到学习本身的重要性。

以上程序就是借鉴了我前面发布的两篇文章组合而来,日晷 和 太极图。有时候创新就是1+1这样。就好像每个汉字我们都认识,但是作家可以将这些汉字组合成作品。写程序也是这样,我们平时积累掌握一些小的函数,然后用自己的方式把他们组合起来,就形成新的创新。

写一点小感想

在接触电脑的很长一段时间里,可能有很多人和我一样,只听说过计算机病毒还有名的木马病毒,当时第一次听到木马病毒的时候,我一直以为是一个啥样的木马。而对于病毒就感觉和人类感染的病毒一样,电脑也会感染病毒,对于病毒的理解感觉很模糊。

随着对于电脑知识和编程能力的提升,渐渐了解了一下计算机知识吧。也明白了什么是病毒,什么是木马病毒。

关于木马病毒我觉得这个故事可以分享给大家

木马一词源于古希腊神话中的“特洛伊木马”(Trojan Horse)。相传,在古希腊攻打特洛伊城的战争中,由于久攻不下,希腊人使用了一个巧妙的计策。他们制造了一匹巨大的木马,并在其空肚子里藏了很多装备精良的勇士。然后,希腊人佯装又一次攻打失败,逃跑时把那匹大木马遗弃在特洛伊城下。守城的士兵误以为这是希腊人留下的战利品,便将其带入城内。到了半夜,木马肚子里的勇士们悄悄地溜出来,与城外的希腊军队里应外合,一举攻下了特洛伊城。

编程这个东西有时候学习越多感觉就越恐惧。

现在的笔记本电脑都有摄像头,我们可以使用程序来调用自己的摄像头,进行拍照,使用代码可以获取到摄像头权限拍照,这一点不难吧。

图像处理为字符串这一点也不难吧。

我们想发送邮件,那使用程序发送邮件这一点也不难吧。

将字符串反算为图像这一点也不难吧。

如果以上每一步都不难,我们是否就可以完成这样一个操作,就是使用电脑拍照发送到邮箱了。

为什么说学习的越多越感觉恐惧,就是如果有人写了这样一个程序放到你的电脑上,并且后台运行,那么它就可以随时监控你的一举一动。

当然学习目的不是去做坏事,而是长见识,明事理。当你明白了什么是病毒,什么是木马,那么在平时生活中就应该注意防范。来历不明的U盘不要随意插到电脑上,来历不明的软件不要下载,使用笔记本电脑的小伙伴可以将摄像头用贴纸封住。

源码

///////////////////////////////////////////////////// 程序名称:旋转太极罗盘图// 编译环境:Mictosoft Visual Studio 2022, EasyX_20200315(beta)// 公 众 号:C语言研究// 作  者:luoyh <2864292458@qq.com>// 最后修改:2024-10-23//
#include <graphics.h>#include <conio.h>#include <cmath>#define W 800#define H 800#define PI acos(-1.0)void DrawCircle(TCHAR str, int variable, int fors, int R, int MYX, int MYY, double QSHD, int size);void DrawKD(int variable, int fors, int R, int Long, double QSHD);void TJ(int centerX, int centerY, int size, double radians);void DrawBK();
int main(){ // 初始化绘图窗口 initgraph(W, H); setbkcolor(RGB(247, 242, 239)); cleardevice();
BeginBatchDraw(); while (true) { double radians = 0.0; // 弧度 for (int i = 0; i < 628; i++) { radians += 0.1; TJ(W / 2, H / 2, 100, radians); // 中间大的 DrawBK(); Sleep(1); FlushBatchDraw(); cleardevice(); } } EndBatchDraw(); // 关闭绘图窗口 _getch(); closegraph(); return 0;}
void DrawCircle(TCHAR str, int variable, int fors, int R, int MYX, int MYY, double QSHD, int size){ double a, x0, y0, w, h, x1, y1; int x, y; settextstyle(size, 0, L"楷体", variable * 3600 / fors - 900, variable * 3600 / fors - 900, 0, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH); a = variable * PI * 2 / fors - QSHD; w = textwidth(str); // 计算字符串宽 w、高 h h = textheight(str); x1 = R * cos(a); // 计算输出字符串的左上角位置 y1 = R * sin(a); x0 = x1 * cos(-a) - y1 * sin(-a); // 将字符串绕原点顺时针旋转 a 弧度 y0 = y1 * cos(-a) + x1 * sin(-a); x0 -= w / 2; // 将字符串向左上偏移 w/2、h/2 y0 += h / 2; // 绘图坐标向下为正 x = (int)(x0 * cos(a) - y0 * sin(a)); // 将字符串绕原点逆时针旋转 a 弧度 y = (int)(y0 * cos(a) + x0 * sin(a)); outtextxy(int(MYX + x + 0.5), int(MYY - y + 0.5), str); // 绘图坐标向下为正}
void DrawKD(int variable, int fors, int R, int Long, double QSHD){ //setlinecolor(RED); setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1); double a, x0, y0, x1, y1; double star_x, star_y; double end_x, end_y; a = variable * PI * 2 / fors - QSHD; x1 = R * cos(a); y1 = R * sin(a); x0 = x1 * cos(-a) - y1 * sin(-a); y0 = y1 * cos(-a) + x1 * sin(-a); star_x = (x0 * cos(a) - y0 * sin(a)); star_y = (y0 * cos(a) + x0 * sin(a)); x1 = (R - Long) * cos(a); y1 = (R - Long) * sin(a); x0 = x1 * cos(-a) - y1 * sin(-a); y0 = y1 * cos(-a) + x1 * sin(-a); end_x = (x0 * cos(a) - y0 * sin(a)); end_y = (y0 * cos(a) + x0 * sin(a)); line((int)(W / 2 + star_x), (int)(W / 2 + star_y), (int)(W / 2 + end_x), (int)(W / 2 + end_y));}
void TJ(int centerX, int centerY, int size, double radians){ setfillcolor(BLACK); solidpie(centerX - size, centerY - size, centerX + size, centerY + size, radians, radians + PI); setfillcolor(WHITE); solidpie(centerX - size, centerY - size, centerX + size, centerY + size, radians + PI, radians); // 使用弧度计算坐标 int x1 = centerX + size / 2.0 * cos(-radians); int y1 = centerY + size / 2.0 * sin(-radians); int x2 = centerX + size / 2.0 * cos(-(radians + PI)); int y2 = centerY + size / 2.0 * sin(-(radians + PI)); setfillcolor(WHITE); solidcircle(x1, y1, size / 2); setfillcolor(BLACK); solidcircle(x2, y2, size / 2); // 绘制鱼眼 setfillcolor(BLACK); solidcircle(x1, y1, size / 8); setfillcolor(WHITE); solidcircle(x2, y2, size / 8);}
void DrawBK(){ settextcolor(BLACK); setlinecolor(BLACK); // 共三圈字 TCHAR str[25]; for (int i = 0; i < 12; i++) { str[0] = L"巽丙丁坤庚辛乾癸壬艮甲乙"[11 - i]; DrawCircle(str[0], i, 12, 150, W / 2, H / 2, PI * 2 / (12 * 2.0), 30); DrawKD(i, 12, 150, 50, 0); }
TCHAR str1[25]; for (int i = 0; i < 12; i++) { str1[0] = L"辰巳午未申酉戌亥子丑寅卯"[11 - i]; DrawCircle(str1[0], i, 12, 200, W / 2, H / 2, 0, 30); DrawKD(i, 12, 200, 50, PI * 2 / (12 * 2.0)); }
for (int i = 0; i < 24; i++) { str1[0] = L"正初"[i % 2]; DrawCircle(str1[0], i, 24, 250, W / 2, H / 2, PI * 2 / (24 * 2.0), 25); DrawKD(i, 24, 250, 50, 0); }
// 绘制五个圆 for (int i = 0; i < 96; i++) { DrawKD(i, 96, 270, 20, 0); } circle(W / 2, H / 2, 150); circle(W / 2, H / 2, 200); circle(W / 2, H / 2, 250); circle(W / 2, H / 2, 270); circle(W / 2, H / 2, 100);}

动态效果

C语言研究
写给自己的笔记,时常写写,时常看看,仅此而已。