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