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

我就用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. HMS Core助力开发者打造高品质游戏,共创智玩新生态

    2021年8月1日,华为HMS Core.Sparkle游戏应用创新沙龙在上海举行.会上,华为HMS Core团队与游戏行业开发者围绕3D图形渲染.网络加速.精准运营等多个话题,探讨了游戏应用开发技术 ...

  2. nginx重新整理——————nginx 模块[十]

    前言 简单介绍一下nginx的模块. 正文 https://nginx.org/en/docs/ 这里面可以看到官方模块. 比如打开这个模块: https://nginx.org/en/docs/ht ...

  3. gitlib配置

    第1步:下载Java并安装Java.一般来说下载jdk对应的版本就行. 第2步:配置Java环境变量,具体如下: 1. 新建:变量名:JAVA_HOME:变量值:C:\Program Files\Ja ...

  4. 从Vue2转换为Vue3

    方便的Vue2到Vue3生命周期映射直接来自Vue3 Composition API文档,我认为这是了解事物将如何变化以及如何使用它们的最有用的方法之一. beforeCreate -> use ...

  5. 《Effective C#》系列之(二)——如何使代码易于阅读和理解

    在<Effective C#>这本书中,使代码更易于阅读和理解是其中一章的主要内容.以下是该章节的一些核心建议: 使用清晰.有意义的名称:变量.方法.类型等的名称应该能够准确地描述其含义, ...

  6. MAC Book: Operation not permitted

    背景: 最近清理系统上的一些无用的文件后,为了release出可用空间,所以还要把.Trash目录下的文件清理才真正清理完,但是ls 查看该目录时发现一直报"operation not pe ...

  7. 精通中间件测试:Asp.Net Core实战指南,提升应用稳定性和可靠性

    引言 在上一章节我们实战了在Asp.Net Core中的项目实战,这一章节讲解一下如何测试Asp.Net Core的中间件. TestServer 还记得我们在集成测试中提供的TestServer吗? ...

  8. 使用GitHub Actions和GitHub pages实现前端项目的自动打包部署

    1. 引言 As we all know,前端部署项目是比较简单的,通常情况下只需要将打包的产物(index.html..js文件..css文件等)放在Web服务器下就,这种叫静态资源托管,成本是比较 ...

  9. BladeDISC 0.2.0更新发布

    ​简介:在BladeDISC正式开源三个月后,我们发布了0.2.0版本,该更新包含了大量的性能优化与功能增强. 在BladeDISC正式开源三个月后,我们发布了0.2.0版本,该更新包含了大量的性能优 ...

  10. 阿里云容器服务差异化 SLO 混部技术实践

    ​简介:阿里巴巴在"差异化 SLO 混合部署"上已经有了多年的实践经验,目前已达到业界领先水平.所谓"差异化 SLO",就是将不同类型的工作负载混合运行在同一节 ...