zoukankan      html  css  js  c++  java
  • C# 【思路】分享 构造可进行单元测试的波形数据

    需要单元测试自己写的识别特殊波峰的算法,所以必须构造波形数据。
    一开始是自己在控件上手绘波形,虽然这种方便,但是能绘制的点太少,每次手画显得麻烦。
    过后,又采用随机数构造波峰,这种虽说能构造很多点,产生很多随机的波峰波谷,但是对于特殊的波峰无法进行预期。
    最后我就想到这种方法,先构造出一定范围的样例峰谷数据,然后可以对这些数据进行一个随机增幅,
    值限定在一定范围,最后在构造需要识别的特殊波峰,并不对这个特殊波峰进行增幅,
    这样自己就构造出了预期的值,单测的时候就能判断了。
     
    具体的办法,我是把样例数据分成 上升的数据段3组,每组10个点,下降的数据段3组,每组10个点,
    可以在每个升降组构造一些小型的峰谷,这样可以在普通波峰上形成小型的波峰。
    一对升降就是一个波峰,也可以先降后升这种组合,还有预期数据(特殊波峰) 一组, 5个点,其中有个特殊值是预期波峰。
    构造好样例数据之后,再开一个循环,循环次数根据对数据点的个数要求自己订
    ,每一次循环就把一对升降组加入集合,这个升降组可以是随机抽取,自己也可以多定义几组升降组,增加波形的随机性。
    这样经循环一次,就形成一个波峰,这样也能安排在特定的位置出现特殊波峰。
    然后定义一个增幅值*(1到2的随机值的平方),因为平方函数的曲线变化更大,相对与立方来说,变化也不是很大,
    如果是立方,波形振幅都很大了。我们只对一般的升降组进行增幅,每次循环只进行一次增幅值的改变,这样既能保持波峰的形态,也能得到更加像随机产生的波形。
     
    当然也可以进行 升降数据的混合组合,产生更加随机的效果。
    最后 应该用gdi+在控件上把数据画出来, DrawLine 方法可以满足要求。
     
    最后再做一个导出数据点集合的功能,直接newtowsoft保存txt文件,这样最后就能再单元测试中使用数据了。

    这张图是没加增幅的情况,所以不够随机。 

  • 相关阅读:
    P1541
    P1004
    P1006
    高精度
    数组
    递归
    顺序结构
    循环结构
    变量
    分支结构
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/15505765.html
Copyright © 2011-2022 走看看