C#怎么绘制实时曲线
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"C#怎么绘制实时曲线",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#怎么绘制实时曲线"吧!1.要做一个调试工具,采集传感器数据并
千家信息网最后更新 2025年01月19日C#怎么绘制实时曲线
这篇文章主要讲解了"C#怎么绘制实时曲线",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#怎么绘制实时曲线"吧!
1.要做一个调试工具,采集传感器数据并显示。绘制曲线注意坐标反转,线条的张力即可。项目中的曲线是从右往左显示的,线条的坐标都放在list里了,效果如下图:
2.上代码
public class DrawingCurve { private Graphics graphics; //Graphics 类提供将对象绘制到显示设备的方法 private Bitmap bitmap; //位图对象 private int timeLine = 60;//60s private int canvasWidth = 600;//画布长度 private int sliceCount = 0;//刻度分段个数 = timeLine private int xSlice = 10;//X轴刻度分端宽度 private int xSliceHeight = 10;//X轴刻度高度 private float tension = 0.5f; //张力系数 private bool showX = true; private bool showY = true; private bool showZ = true; //Queueque = new Queue ();//曲线fifo /// /// 构造函数 /// public DrawingCurve() { this.xSlice = this.canvasWidth / timeLine; } ////// 绘制画布 /// /// /// /// ///public Bitmap DrawCanvas(int width, int height,List points) { if (bitmap != null) { bitmap.Dispose(); bitmap = null; } bitmap = new Bitmap(width, height); graphics = Graphics.FromImage(bitmap); graphics.FillRectangle(Brushes.Black, new Rectangle(0, 0, width, height)); graphics.Transform = new Matrix(1, 0, 0, -1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(0, height / 2, MatrixOrder.Append); Pen pen = new Pen(Color.Red, 1); pen.DashStyle = DashStyle.Custom; pen.DashPattern = new float[] { 2, 2 }; graphics.DrawLine(pen, new Point(0, height / 4), new Point(width, height / 4)); graphics.DrawLine(pen, new Point(0, height / -4), new Point(width, height / -4)); graphics.DrawLine(new Pen(Color.GreenYellow,1), new Point(0, 0), new Point(width, 0)); graphics.DrawString("0", new Font("Vendara",10), Brushes.White, new Point(0, -15)); graphics.DrawString("+", new Font("Vendara", 10), Brushes.White, new Point(0, height / 4)); graphics.DrawString("-", new Font("Vendara", 10), Brushes.White, new Point(0, height / -4-15)); graphics.Transform = new Matrix(1, 0, 0, 1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(0, height / 2, MatrixOrder.Append); graphics.DrawString("-59s", new Font("Vendara", 8), Brushes.White, new Point(0, height/2-15)); graphics.DrawString("0s", new Font("Vendara", 8), Brushes.White, new Point(width-20, height / 2 - 15)); for (int i = 0; i < timeLine; i++) { int scale = i * xSlice; graphics.DrawLine(new Pen(new SolidBrush(Color.Blue)), 0 + scale, 0 + xSliceHeight * 0.1f, 0 + scale, 0 - xSliceHeight * 0.1f); } graphics.Transform = new Matrix(-1, 0, 0, -1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(width, height / 2, MatrixOrder.Append); if (showX) DrawX(graphics, points); if (showY) DrawY(graphics, points); if (showZ) DrawZ(graphics, points); graphics.Dispose(); return bitmap; } #region 绘制曲线 private void DrawX(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.Cyan, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } private void DrawY(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.Purple, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } private void DrawZ(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.OrangeRed, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } /// /// 曲线开关 /// /// /// public void HideCurve(string _xyz,bool show) { switch (_xyz) { case "x": showX = show; break; case "y": showY = show; break; case "z": showZ = show; break; default: break; } } #endregion }
3.UI上使用ThreadStart进行调用,根据需要设置休眠时间即可,同时设置pictureBox显示即可。
感谢各位的阅读,以上就是"C#怎么绘制实时曲线"的内容了,经过本文的学习后,相信大家对C#怎么绘制实时曲线这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
曲线
实时
C#
刻度
学习
内容
坐标
对象
张力
画布
线条
上代
个数
传感器
位图
函数
同时
宽度
就是
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据采集服务器型号
通信网络安全防护测评流程
新华商服务器
天津软件开发哪家不错
服务器登录失败内存位置访问失效
学院计算机网络技术
教育系统网络安全知识竞赛
数据库毫秒格式化
奉贤区智能化软件开发咨询报价
服务器名称地址是啥
软件开发需要什么学历证明
西藏第三方软件开发定制收费
网络技术在新闻实践中的应用
数据库关于登录界面
网络技术人员专业知识
数据库最常用的连接
我的世界基岩版电脑版服务器推荐
java连接远程数据库
服务器电源过电流保护设计
db2怎样看数据库名
山西互联网科技企业
通信网络安全防护测评流程
拉客软件开发
数据库定义default
万方医学数据库如何插入论文
互联网科技用于战争
第一页网络技术
江苏常规软件开发用途
数据库表格怎么查看
网络安全威胁的形式