当前位置: 首页 > news >正文

Easyx使用(数据可视化)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        easyx本身是为图形绘制准备的。既然是图形绘制,而且它还可以处理图像,处理键盘、鼠标,那么自然做游戏是非常合适的。然而不仅仅如此,它还可以做一些数据可视化的操作。这里面很多程序本身是没有界面,当成后台程序在跑的,但是这个时候如果有个图形化界面,可以展现各个设备的运行状态,这样的处理效率,要比纯后台程序效率高很多。

        很多人也许会说,是不是网页也可以。事实上是这样的,但是如果只是网络设备、232设备、485设备,那么把这些数据直接用easyx展示,不是效率更高么?当然,今天我们就简单展示一下动态的正弦曲线是怎么样的,算是抛砖引玉吧。

1、动态的正弦曲线

        正弦曲线绘制的时候,一般都是一个、一个的离散点,实际绘制的时候都会把这个点绘制成直线。再加上起始点的不同,就会产生一个动态变化的效果。

// 显示波形
void drawSinWave(int offsetX)
{int prevX = -1;int prevY = -1;setlinecolor(BLUE); // 设置线条颜色为蓝色BeginBatchDraw();for (int x = 0; x < WIDTH; x++){int y = (int)(AMPLITUDE * sin((x + offsetX) * 0.1* FREQUENCY) + HEIGHT / 2);if (prevX != -1 && prevY != -1) //过滤第一个点{line(prevX, prevY, x, y);}prevX = x;prevY = y;}settextcolor(RED); // 设置文字颜色为红色settextstyle(20, 0, L"Arial"); // 设置字体样式和大小outtextxy(280, 50, L"正弦波仿真"); // 在屏幕上方位置显示文字FlushBatchDraw();
}

2、动态更新偏移值

        细心的同学发现了,刚才的drawSinWave函数有一个offset输入参数。这个参数就是整个正弦曲线可以运动起来的关键。通过修改offset的数值,可以让直线的起始数值发生改变,从而间接产生流动的效果。当然实际开发的时候,会用vector或者是queue来保存和展示数据,这也是可以的。

	while (true){cleardevice(); // 清空屏幕drawSinWave(offsetX); // 绘制正弦波并连接点offsetX += SPEED; // 每帧增加偏移量if (offsetX > WIDTH){offsetX = 0;}Sleep(50); // 稍微延迟,控制动画速度}

3、其他需要注意的地方

        easyx写的比较多了,其他需要注意的地方就是字符集的设置、告警宏的添加、FlushBatchDraw的补充等等。当然如果有一些参数不想通过InputBox输入,那么通过命令行输入也是可以的,类似于这样,

// 解析命令行参数,设置移动速度
void parseArgs(int argc, char* argv[])
{if (argc > 1){SPEED = atoi(argv[1]); // 如果传入了速度参数,设置 SPEED}
}

        最后给出完整的代码,有需要的小伙伴,可以好好看一下,

// 基础头文件
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>// 关于全局数据
static const int WIDTH = 640;
static const int HEIGHT = 480;
static const int AMPLITUDE = 100;
static const int FREQUENCY = 1;
static int SPEED = 2; // 设置默认的移动速度为 2// 解析命令行参数,设置移动速度
void parseArgs(int argc, char* argv[])
{if (argc > 1){SPEED = atoi(argv[1]); // 如果传入了速度参数,设置 SPEED}
}// 显示波形
void drawSinWave(int offsetX)
{int prevX = -1;int prevY = -1;setlinecolor(BLUE); // 设置线条颜色为蓝色BeginBatchDraw();for (int x = 0; x < WIDTH; x++){int y = (int)(AMPLITUDE * sin((x + offsetX) * 0.1* FREQUENCY) + HEIGHT / 2);if (prevX != -1 && prevY != -1) //过滤第一个点{line(prevX, prevY, x, y);}prevX = x;prevY = y;}settextcolor(RED); // 设置文字颜色为红色settextstyle(20, 0, L"Arial"); // 设置字体样式和大小outtextxy(280, 50, L"正弦波仿真"); // 在屏幕上方位置显示文字FlushBatchDraw();
}// 主函数入口
int main(int argc, char* argv[])
{int offsetX = 0;parseArgs(argc, argv); // 解析命令行参数initgraph(WIDTH, HEIGHT);setbkcolor(RGB(240, 240, 240)); //背景为灰色setbkmode(TRANSPARENT);while (true){cleardevice(); // 清空屏幕drawSinWave(offsetX); // 绘制正弦波并连接点offsetX += SPEED; // 每帧增加偏移量if (offsetX > WIDTH){offsetX = 0;}Sleep(50); // 稍微延迟,控制动画速度}_getch();closegraph();return 0;
}

http://www.dtcms.com/a/453544.html

相关文章:

  • 基于单片机的大货车防偷油系统设计
  • JavaScript:神奇的ES6之旅
  • 延吉网站开发公司特别好的企业网站程序
  • Avalonia:现代跨平台UI开发的卓越之选
  • gta5网站正在建设阿里云网站建设与发布题库
  • 网页制作的网站淘宝页面设计的网站
  • 【STM32项目开源】STM32单片机人体健康监测系统
  • 车载诊断架构 --- 车载ECU故障类型详解(上)
  • 房产中介做网站wordpress 下载插件xydown
  • 廊坊自助建站设计自己开发的软件如何赚钱
  • 【Redis学习】Redis常用数据类型的万字详解
  • 探讨生成式AI在代码评审与重构中的决策权重分配
  • 【LeetCode380题】和【LeetCode238题】题解
  • The “Launch”_2 - 价值交付与灰度发布的系统实现方案
  • 做的网站怎么打开是白板静态网站 价格
  • JavaScript Boolean(布尔)
  • CentOS 7.6 系统源码部署 HivisionIDPhotos
  • 电子电气架构 --- 汽车座舱行业发展现状分析
  • 李建忠 电子商务网站建设与管理 pptwordpress百度不收录文章
  • 算法入门:专题攻克一---双指针(3)有效三角形的个数
  • 怎么做才能提高网站权重360建筑网证书估价
  • IPTV Pro 9.1.9| 空壳直播软件,可导入直播源
  • 【高级】系统架构师 | 2025年上半年案例分析真题DAY1
  • 图片上传网站变形的处理新浪微博登录网页版
  • OpenCV(二):加载图片
  • 免费的网站推广怎么做效果好服务营销策划方案
  • 【征文计划】Rokid 语音唤醒技术深度解析:从声学模型到低功耗优化实践
  • Linux---进程信号
  • 从汽车传动到航空航天:滚珠花键的跨领域精密革命
  • 电子电气架构 --- 汽车座舱市场发展核心方向