六边形溯源追踪算法编程思想与代码

六边形算法简介

基于浓度梯度的六边形化学源追踪算法是Russell在2003年提出了。该追踪算法的主要思路如下:

    While(循环停止条件){

      If(

       Then 在n点处逆时针旋转60°,前进固定步长m;

     Else

         在n点处顺时针旋转60°,前进固定步长m;

     End if

}

其中,为在第n个点处所测化学物质的浓度,m是算法设定的步长。

如下图5.1所示,当,即B点浓度高于A点,且在n-1处是顺时针旋转时,那么在第n点(C点)处,将逆时针旋转60°,即在C点处的方向为垂直向上,偏向了浓度高的区域,符合期望;当,即A点浓度高于B点,且在n-1处是逆时针旋转时,那么在第n点(D点)处,将逆时针旋转60°,即从D点到E点,路径为:A-B-D-E,偏向了浓度高的区域,符合期望。

图5.1  六边形追踪算法

六边形算法流程图

将基于浓度梯度的六边形溯源追踪算法的实现主要包括两大部分:测量值传回电脑、下一点方向及相对位移的确定。算法流程图如下:


图5.2  六边形溯源算法流程图

 5.3 第n点处的方向及相对位移

在第n个点处测量好电导率并传回电脑的监控软件后,根据第n-2点与n-1点处的浓度大小和第n-1点处的旋转方向,确定第n+1个点的位置。

在编程时,需要知道n-1点和n点的坐标,计算出这两个点所构成线段的斜率,再根据方向策略确定n点和n+1点所构成线段的斜率,由固定步长计算得到在第n点处的相对位移。根据斜率可分为特殊情况和一般情况。

5.3.1 特殊情况

确定第n点方向及相对位移,特殊情况包括斜率为无穷大和斜率为0这两大类,又进一步分为下图中的四种情况:


对应的n+1点分别如下:




5.3.2 一般情况

当第n-1和n点构成的线段斜率存在且不为0时,为一般情况。根据第n-1点和第n点的相对位置,可分为下图中的四种情况:


 

变量设置如下表: