项目需要识别数组的波峰波谷,我就想 可视化的测试自己的判断波峰波谷的算法,于是就有了下面这张图。

我就用gdi+再panel上描点,点画完后,就点击分析按钮蓝色的为波峰 绿色的为波谷。虽然说能识别出来,但是对于波峰来说识别的点对于项目来说有些生硬。比如这两点

按照项目来讲 384也应算作峰顶,但是我目前还没实现。我的实现的思路是这样,定义一个diff值,比如10,再387这里是最大值,然后往前循环,如果前一个值和387相差<10,再往前找,并判断前面的点与387这个点的时间间隔是否>1秒 如果相差>10或者间隔>1秒就停止循环。
 
算法的思路是这样,首先判断曲线走势,为上升的话, 找到第一个封顶,为下降的话,第一个点就是峰顶。然后找峰谷 ,一个循环就结束了。
代码:
private void Recognize()
{ Font font = new Font("宋体", 10); if (LstDp.Count < 2)
{
return;
} bIsScanStart = true; DataPoint dpDown = null; for (int i = 1; i < LstDp.Count; i++)
{ if (bIsScanStart)
{ iSIndex = i - 1;
//判断开始是否上升
bStartIsUp = ChargeIsStartUp(iSIndex, LstDp); dpDown = LstDp[iSIndex]; bIsScanStart = false;
} var dS = LstDp[i - 1]; var dNext = LstDp[i]; int topIndex = 0; if (bStartIsUp)//开始是上升的
{ while (i + 1 < LstDp.Count)
{ dS = LstDp[i]; dNext = LstDp[i + 1]; ++i; if (dNext.Val - dS.Val < 0)//到达峰顶dS
{ LstPtTop.Add(dS); topIndex = LstPtTop.Count - 1;
break; } } } else
{
LstPtTop.Add(dpDown);
topIndex = LstPtTop.Count - 1;
} DataPoint temp = LstPtTop[topIndex]; int j = i + 1; while (j < LstDp.Count)
{ var dTopNext = LstDp[j]; var dTopS = LstDp[j - 1]; j++; if (dTopNext.Val - dTopS.Val > 0)//峰谷dTops
{ LstDwn.Add(dTopS);
bIsScanStart = true;
break;
} else
{ continue; }
} i = j - 1; if (i == LstDp.Count() - 1)
{
if (LstDp[i].Val - LstDp[i - 1].Val > 0)
{
LstPtTop.Add(LstDp[i]);
}
}
}
for (int i = 0; i < LstPtTop.Count; i++)
{ g.DrawString("峰顶", font, Brushes.Blue, new Point(LstPtTop[i].pt.X,LstPtTop[i].pt.Y-10)); } for (int i = 0; i < LstDwn.Count; i++)
{ g.DrawString("峰谷", font, Brushes.DarkGreen, new Point(LstDwn[i].pt.X, LstDwn[i].pt.Y + 5)); }
}

下载:

代码写的很随意,主要是思路。

Winform 动态画曲线 波峰波谷识别的更多相关文章

  1. 贝塞尔曲线.简单推导与用opengl实现动态画出。

    在opengl中,我们可以用少许的参数来描述一个曲线,其中贝塞尔曲线算是一种很常见的曲线控制方法,我们先来看维基百科里对贝塞尔曲线的说明: 线性贝塞尔曲线 给定点P0.P1,线性贝塞尔曲线只是一条两点 ...

  2. gc图波峰波谷一直上升问题

    垃圾回收曲线,波峰和波谷一直上升.正常是波峰波谷在同一水平线上,可以想象如果程序继续运行下去,老年代内存回收后也不断上升,当达到老年代满了的时候,就会报内存溢出错误. 用jmap -histo pid ...

  3. Winform 动态 画图 不闪

    一.问题:解决winform动态画图闪的问题,网上搜的方法,大部分都是: “this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlSty ...

  4. Faas 典型场景——应用负载有显著的波峰波谷,典型用例-基于事件的数据处理

    Serverless适用的两大场景 场景一:应用负载有显著的波峰波谷 Serverless化与否的评判标准并不是公司规模的大小,而是其业务背后的具体技术问题,比如业务波峰波谷明显,如何实现削峰填谷.一 ...

  5. PHP利用GD库画曲线

    效果: PHP代码 <?php Header('Content-type: image/png;Charset:utf-8'); //声明图片 $im = imagecreate(400,200 ...

  6. 1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961688 l 对话框 1.“插入”->“资源”->“对话框” 2.对话框属性如下: 双击 ...

  7. WinForm动态查询

    WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...

  8. OpenGL进阶演示样例1——动态画线(虚线、实线、颜色、速度等)

            用OpenGL动态绘制线段.事实上非常easy,但到如今为止.网上可參考资料并不多. 于是亲自己主动手写一个函数,方便动态绘制线段.代码例如以下: #include<GL/glu ...

  9. ARCGIS动态画点

    小马哥淡定 原文 ARCGIS动态画点 private void DrawPointOnMap(double x, double y,bool clear) { IMapControl2 pMapCt ...

  10. Echarts 展示两条动态数据曲线

    利用Echarts 展示两条动态数据曲线,每1秒刷新一下数据,在echart官网例子基础上修改,修改了仿真数据的生成方式.生成数量,曲线数量,最总效果图如下: 详细代码如下: 遇到的主要问题点, 1, ...

随机推荐

  1. 多次复制Excel符合要求的数据行:Python批量实现

      本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法.   首先,我们来明确一 ...

  2. 机器学习服务活体检测算法荣获CFCA权威安全认证

    随着人脸识别技术在金融.医疗等多个领域的加速落地,网络安全.信息泄露等问题愈为突出,用户对应用稳定性和安全性的要求也更为严格.为保障各行业高效稳定的开展业务,提前发现和应对潜在安全风险,HMS Cor ...

  3. jemter做参数化的几种方法

    第一种:使用用户参数:添加--前置处理器--用户参数

  4. 冒泡排序的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列 特性 复杂度分析 时间复杂度: 最好情况:O(n) ...

  5. 【4】Spring框架的起源

    在我们的<Java Spring框架入门教程>中对 Spring 框架进行了十分详尽的介绍和剖析,但在学习 Spring Boot 之前,在这里回顾一下 Spring 是怎么出现的. Sp ...

  6. 重新点亮linux 命令树————网络故障排除[十一五]

    前言 简单整理一下网络故障不可达命令. 正文 ping 是否能ping traceroute 追踪路由跳转 mtr 检查数据包是否丢失 nslookup telnet 端口是否可达 tcpdump 能 ...

  7. centos 虚拟机修改mac和ip地址

    前言 因为网上过于零散,故而整理.在此我用的是vm虚拟机. 正文 在我们安装好vm虚拟机后,我们会获得两个虚拟网卡. 那么我们获得两个虚拟网卡后,这两个网卡到底是什么呢?那么我们打开vm的虚拟网络编辑 ...

  8. Pytorch DistributedDataParallel(DDP)教程二:快速入门实践篇

    一.简要回顾DDP 在上一篇文章中,简单介绍了Pytorch分布式训练的一些基础原理和基本概念.简要回顾如下: 1,DDP采用Ring-All-Reduce架构,其核心思想为:所有的GPU设备安排在一 ...

  9. 力扣607(MySQL)-销售员(简单)

    题目: 表: SalesPerson 表: Company 表: Orders 编写一个SQL查询,报告没有任何与名为 "RED" 的公司相关的订单的所有销售人员的姓名. 以 任意 ...

  10. Spring Cloud Stream 体系及原理介绍

    简介: Spring Cloud Stream在 Spring Cloud 体系内用于构建高度可扩展的基于事件驱动的微服务,其目的是为了简化消息在 Spring Cloud 应用程序中的开发. 作者 ...