传感器仿真平台——数据生成模块(三)
数据生成模块有下面这样一种情况:
对于不同的传感器仿真实验,所使用的数据类型,数据数量不一样。
如实验一是进行最大覆盖率实验,则他需要的数据格式可能是如下所示:
1 Class Sensor 2 { 3 public int x; 4 public int y; 5 public double direction; //方向 6 public double sweep;//扇形大小 7 }
实验二进行的是信号强度实验,则他可能还需要一个用来作为覆盖物的目标,如下:
1 Class Target 2 { 3 public int x; 4 public int y; 5 public double direction; //方向 6 public double speed;//移动速度 7 }
如上,实验一需要100个Sensor对象,实验二则需要500个Sensor对象和10个Target对象,
那么,究竟用什么方法才能实现一种通用的数据生成接口呢?
其实,仔细一想,你会发现,数据是给算法用的吧?那和我的框架又有啥关系呢,谁用谁定义呗。
图中有两个接口,
IDataImp为数据生成接口,在框架中需要实现该接口来获得数据,init函数作为初始化数据函数,无论数据是随机生成还是外部导入,都由init来完成。
IIterator为迭代器,这样做的原因是,本人认为做实验总是会把每一个数据都做一遍,所以遍历数据进行实验就够了。对吧?
void DoWork() { IIterator iterator; IDataImp list= new ConcreteDataImp(); iterator = list.getIterator(); while (iterator.MoveNext()) { Hashtable table = iterator.CurrentItem(); //do something method.InitData(options,Callback); method.process(table); //do something iterator.Next(); } }
2014/8/27补:
上面的做法看上去很好,但是实际使用的时候,自我感觉有点作茧自缚。原因有很多,这里就不一一列举了。不过.Net有定义好的迭代器接口可以现成使用。
public interface IDataImp:IEnumerator { void init(int count); object this[int index] { get; set; } }
最终被我改成了这样,真是越改越简单了。实现IEnumerator接口使数据可以迭代,重载[]实现随机访问