用EasyX图形库编写动态彩色万花尺程序(c语言)

在EasyX看到别人写的万花尺程序,想起来小时候玩的,就动手改进增加了一些效果。参考程序连接(侵删):万花尺_慢羊羊
我的效果如下,输入数据:【300 180 100】【450 320 141】
输出效果:

输入数据:【86 30 42】【86 38 12】【300 180 100】【600 400 140】
输出效果:

由于代码简单,就不多解释,值得注意的是:代码运行环境是VS2019 EasyX20200109,其他版本没试过,,如果代码提示参数类型有错误,可以设置 项目——属性——配置属性——高级——字符集——将Unicode设置为未设置 即可。附上代码:

//********************************************************************//
// 程序名称:万花尺程序
// 编译环境:VS2019,EasyX_20200315(beta)
//#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <string.h>
#include <iostream>
#include<mmsystem.h>
#pragma comment(lib,"WINMM.LIB")
#define PI 3.1415926536             //π的近似值
#define WIN_X 1200                  //绘图窗口尺寸X轴
#define WIN_Y 700                   //绘图窗口尺寸Y轴
void CurrentTime(char*);            //读取电脑时间函数int color[15] = {        //颜色数组GREEN,            //  0x00AA00    绿LIGHTMAGENTA,  //  0xFF55FF    亮紫BLUE,         //  0xAA0000    蓝RED,           //  0x0000AA    红YELLOW,            //  0x55FFFF    黄LIGHTGRAY,     //  0xAAAAAA    浅灰MAGENTA,      //  0xAA00AA    紫LIGHTCYAN,     //  0xFFFF55    亮青WHITE,            //  0xFFFFFF    白LIGHTGREEN,        //  0x55FF55    亮绿BROWN,            //  0x0055AA    棕LIGHTRED,      //  0x5555FF    亮红CYAN,         //  0xAAAA00    青DARKGRAY,      //  0x555555    深灰LIGHTBLUE     //  0xFF5555    亮蓝
};///主程序///
*******************************************************************/int main()
{int circle_num=1;//不擦除绘图次数int R=300;     // 外部静圆半径int r=180;        // 内部动圆半径int dr=100;       // 内部动圆上的作图点到圆心的距离HWND hwnd = initgraph(WIN_X, WIN_Y); // 创建绘图窗口setorigin(WIN_X / 2, WIN_Y / 2);       // 设定圆心坐标//绘图窗口名字SetWindowText(hwnd, "万花尺");//mciSendString(TEXT("open H:\\我曾-隔壁老樊.mp3 alias mysong"), NULL, 0, NULL);//插入音频文件//mciSendString(TEXT("play mysong"), NULL, 0, NULL);
begin:// 获取用户输入char input_pre[30];//存储用户输入的数组bool flag;//反馈用户在输入窗口点击 “确认”键还是“取消”键flag=InputBox(input_pre,30,"大圆(R<350)_小圆(r<R)_动点的尺寸(△r<r):","请按顺序输入参数:","300 180 100",0,0,false);if (flag == false)//防止误按“取消”键{flag=_getch();R = 300;r = 180;dr = 100;}sscanf_s(input_pre, "%d %d %d", &R,&r,&dr);/**********************************************************************************************************/// 求执行次数( )int m = R, n = r;int tmp;while (n != 0)//求最小公约数,即可求得绘图周期{tmp = m % n;m = n;n = tmp;}double maxdegree = (double)r / m * 2 * PI;//绘图周期
/////显示输入参数char RR[10], rr[10], drr[10],CIRcle_num[10];//清空前次的输入for(int W_y=5;W_y <= 105;W_y += 25){outtextxy(5 - WIN_X / 2, W_y - WIN_Y / 2, "         ");}sprintf_s(RR, "R=%d",R);sprintf_s(rr, "r=%d", r);sprintf_s(drr, "△r=%d", dr);sprintf_s(CIRcle_num, "CIR=%d", (circle_num+2)/3);settextstyle(18, 0, _T("宋体"));settextcolor(GREEN);outtextxy(5-WIN_X / 2, 5-WIN_Y / 2,RR);outtextxy(5 - WIN_X / 2, 30 - WIN_Y / 2, rr);outtextxy(5 - WIN_X / 2, 55 - WIN_Y / 2, drr);outtextxy(5 - WIN_X / 2, 80 - WIN_Y / 2, CIRcle_num);//int maxnum; //旋转绘图的个数maxnum = (int)round(162.0 * (R - 50.0) / (maxdegree * (300 - 50.0)));//根据图形复杂度和绘图尺寸调整旋转绘图个数if (maxnum < 4) maxnum = 1;else if (maxnum > 11) maxnum = 11;//限制绘图最大和最小个数,避免太密集//输出绘图个数char MAXnum[10];sprintf_s(MAXnum, "N=%d", maxnum);outtextxy(5 - WIN_X / 2, 105 - WIN_Y / 2, MAXnum);/*/******************************//****************************************///// 绘图int x, y;int D_FLAG = 0;//旋转的次数int x0, y0;double add = 0.003;     //每点增量int delay_time;//延时参数//根据绘图像素数调整绘图速度(延时时长)delay_time =(int)round( 100*5.0 * add );if (delay_time > 500) delay_time = 500;//避免延时过长for (double degree = 0; degree < maxdegree; degree += add){x = (int)round(dr * cos(degree * (double(R) / r - 1)) + ((double)R - r) * cos(degree)); //圆内旋线公式 ,x坐标y = (int)round(dr * sin(degree * (double(R) / r - 1)) - ((double)R - r) * sin(degree));putpixel(x, y, color[circle_num - 1]);//根据绘图像素数调整绘图速度(延时时长)for (int us = 0;us < delay_time;us++)for (int i = 0;i < 50000;i++);}旋转一定角度绘图,为了美观////for循环使得每次旋转2.5度,for (D_FLAG=1;D_FLAG < maxnum;D_FLAG++){if (D_FLAG == (maxnum-1))add = 0.003;else add = 0.02;for (double degree = 0; degree < maxdegree; degree += add){x0 = (int)round(dr * cos(degree * (double(R) / r - 1)) + ((double)R - r) * cos(degree));y0 = (int)round(dr * sin(degree * (double(R) / r - 1)) - ((double)R - r) * sin(degree));x = (int)round(x0 * cos(PI / 72 * D_FLAG) - y0 * sin(-PI / 72 * D_FLAG));      //逆时针旋转2.5度y = (int)round(x0 * sin(-PI / 72 * D_FLAG) + y0 * cos(PI / 72 * D_FLAG));if (D_FLAG == (maxnum - 1))//设置最后一次绘图颜色和绘图速度,与其他不同{putpixel(x, y, color[circle_num +1]);for (int us = 0;us < delay_time;us++)for (int i = 0;i < 50000;i++);}else {putpixel(x, y, color[circle_num]);for (int us = 0;us < delay_time;us++)for (int i = 0;i < 100000;i++);}   }   }/绘图完成///用户操作//******************************************************/IMAGE img;//截图,方便保存getimage(&img, -WIN_X / 2, -WIN_Y / 2, WIN_X , WIN_Y );outtextxy(5 - WIN_X / 2,  WIN_Y / 2-30, _T("按空格键继续,按s或S保存图像,按c或C重新绘制,按 ESC 退出"));// 重新开始,或退出程序char c = _getch(); if (c == 's'||c=='S') /'s'||'S'键为保存图片到D:盘{char tim1[50] = "D:\\万花尺",tim2[30],tim3[10]=".png";CurrentTime(tim2);       //获取时间并以字符类型放入tim1strcat_s(tim1,50,tim2);strcat_s(tim1,50, tim3);saveimage(tim1,&img);//保存图片,以时间命名图片contin:  //防止误按 s 键settextcolor(LIGHTCYAN);outtextxy(5 - WIN_X / 2, 130 - WIN_Y / 2, "图片保存完成!");outtextxy(5 - WIN_X / 2, 155 - WIN_Y / 2, "按相应键继续..");c = _getch();settextcolor(GREEN);outtextxy(5 - WIN_X / 2, 130 - WIN_Y / 2, "              ");//清空字样outtextxy(5 - WIN_X / 2, 155 - WIN_Y / 2, "              ");if (c == 's' || c == 'S') goto contin;}switch (c) {case 0x1b:                   //ESC键退出程序closegraph();//退出绘图程序return 0;break;case 0x20:                    //空格键键,在原窗口继续绘图circle_num+=3;if (circle_num > 15) circle_num = 1;//清除提示位置outtextxy(5 - WIN_X / 2, WIN_Y / 2 - 30, _T("                                                         "));goto begin;break;case 'c':case 'C':                   //'c'||'C'键关闭原绘图窗口,并新建绘图窗口{circle_num = 1;closegraph();HWND hwnd = initgraph(WIN_X, WIN_Y);    // 创建绘图窗口setorigin(WIN_X / 2, WIN_Y / 2);   // 设定圆心坐标goto begin;break;}default://其他键,退出程序break;}return 0;
}///*****************************************
/读取计算机本地时间函数//
void CurrentTime(char* TIM)
{time_t tt;time(&tt);struct tm t;localtime_s(&t, &tt);char tttt[30];sprintf_s(tttt, "%d_%02d_%02d_%02d_%02d_%02d",t.tm_year + 1900,t.tm_mon + 1,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec);strcpy_s(TIM, strlen(tttt) + 1,tttt);
}/*****************************************************/
/*******************************************************/

谢谢阅览,如有侵权,还请联系。

用EasyX图形库编写动态彩色万花尺程序(c语言)相关推荐

  1. 如何用c语言编写炫酷烟花程序,C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include #include //图形界面库头文件 #include // ...

  2. c语言动态烟花小程序代码,如何用c语言编写动态烟花

    用c语言编写动态烟花的方法:首先绘制菜单界面显示文字:然后设置烟花有上升阶段和爆炸阶段,定义烟花和烟花弹结构体:最后初始化数据,加载资源贴图,随机发射数目随机. 用c语言编写动态烟花的方法: 效果展示 ...

  3. c语言烟花程序视频,如何用c语言编写动态烟花

    用c语言编写动态烟花的方法:首先绘制菜单界面显示文字:然后设置烟花有上升阶段和爆炸阶段,定义烟花和烟花弹结构体:最后初始化数据,加载资源贴图,随机发射数目随机. 用c语言编写动态烟花的方法: 效果展示 ...

  4. 【基础入门详解】程序员的二维码也要玩出不同色彩,用Python生成动态彩色二维码

    一.前言 常见的二维码为QR CodeCode,QR全称是Quick Response,是一个近几年来移动设备上超流行的一种编码方式.它的结构如下: 主要有以下特点: 符号规格从版本1(21×21)到 ...

  5. VS2022安装EasyX 及 EasyX图形库安装和使用(附C++各图形编程项目示例源码)

    文章目录 一.EasyX的安装 二.C++_EasyX 项目 1. 樱花 2. 雪花 3. 小熊 4. 跳动爱心 5. 橘子钟表 6. 红玫瑰 7. 奥特曼 三.更多项目资源 EasyX提取链接 网盘 ...

  6. c语言循环写回合制小游戏_告别黑框框——用C语言Easyx图形库实现图形界面

    很早以前就接触到了Easyx图形库,当时感叹还有这么简单的C图形库供我们使用.后开用Easyx做过推箱子.图形界面钢琴等等简单的小游戏.今天给大家介绍一下Easyx图形库. Easyx图形库是针对C+ ...

  7. 用easyx画电子钟_基于EasyX图形库的多线程绘图应用

    本文<基于EasyX图形库的多线程绘图应用>由手机部落整理,仅供参考.如果觉得很不错,欢迎点评和分享-感谢你的阅读与支持! 张煜昕 摘要:EasyX 是C++语言进行图形化编程和游戏编程的 ...

  8. c++语言表白超炫图形_C++编写的表白小程序(图片围成爱心+烟花+音乐)-附源代码...

    一.效果 视频效果: C++编写的表白小程序(图片围成爱心+烟花+音乐)-附源码 二.项目完整源代码: 链接:https://pan.baidu.com/s/1zea3Wji1VN4FIrqXoa4L ...

  9. 停车场管理系统 C语言实现 EasyX图形库

    一.设计目的 软件算法综合设计是理论教学的深化和补充,具有较强的实践性,是电气信息类各专业的一门重要的实践环节必修课,涵盖<程序设计基础>.<离散结构>.<面向对象程序设 ...

最新文章

  1. 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1
  2. 部署到CloudFoundry上的应用,启动超时的处理
  3. eas库存状态调整单不能反审核_审核与反审核
  4. 用手写一个工具的过程讲清楚Go反射的使用方法和应用场景
  5. linux c语言 utf8读写,关于在C程序中处理UTF-8文本的方法详解
  6. Qt 中使用全局变量的方法
  7. 惰性函数定义模式 网页设计
  8. Android04-UI01常用控件
  9. unity视频教程【高清+精选】大放送
  10. 合并Python列表的魔幻12法
  11. 科创人|容联七陌CEO陈光:90后街舞少年的CEO修炼手册
  12. Spring之声明式事务控制(九)
  13. pycharm: Error: Cannot run program……
  14. ie浏览器表单提交被清空问题
  15. C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。
  16. 如何快速制作Gif动图
  17. RabbitMQ--扩展--11--均衡负载
  18. requests-bs4路线爬取中华英才网并分析热门职位及其薪资
  19. oracle mysql认证考试流程_oraclemysql认证考试的流程有些什么
  20. mysql关键字 exists 与 in

热门文章

  1. 医院临床路径管理系统源码 医院管理系统源码
  2. IRIVIS·爱芮思医美机构简介
  3. 验证为制药无菌生产提供保障
  4. 工程伦理--10.3 工程师的职业美德内涵
  5. OWASP之安全日志记录和监控失败
  6. Supplier JAVA_Java 8 Supplier 使用
  7. JavaSE第一阶段模块四
  8. tf.get_collection()用法解析
  9. hadoop主节点(NameNode)备份策略以、恢复方法、操作步骤
  10. 申论考试如何获得高分?