六边形溯源追踪算法编程思想与代码
六边形算法简介
基于浓度梯度的六边形化学源追踪算法是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点的相对位置,可分为下图中的四种情况:
变量设置如下表:
六边形溯源追踪算法编程思想与代码相关推荐
- (王道408考研数据结构)第六章图-第四节5:最短路径之弗洛伊德算法(思想、代码、演示、答题规范)
文章目录 一:动态规划基本思想 二:弗洛伊德(Floyd)算法基本思想 三:弗洛伊德(Floyd)算法代码实现 四:弗洛伊德(Floyd)算法代码视频演示 五:弗洛伊德(Floyd)算法代码答题规范 ...
- (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...
- (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...
- (王道408考研数据结构)第六章图-第四节2:最小生成树之克鲁斯卡尔算法(思想、代码、演示、答题规范)
文章目录 一:克鲁斯卡尔(Kruskal)算法思想 二:克鲁斯卡尔(Kruskal)算法代码实现 三:克鲁斯卡尔(Kruskal)算法视频演示 四:克鲁斯卡尔(Kruskal)算法动画演示 五:克鲁斯 ...
- (王道408考研数据结构)第六章图-第四节1:最小生成树之普利姆算法(思想、代码、演示、答题规范)
文章目录 一:普利姆(Prim)算法算法思想 二:普利姆(Prim)算法注意点 三:普利姆(Prim)算法代码实现 四:普利姆(Prim)算法代码视频演示 五:普利姆(Prim)算法动画演示 六:普利 ...
- 十分钟搞懂基-2 FFT原理及编程思想
0.写在最前 写本文的目的一是为了帮人理清FFT算法思路,二是有几个疑问(在5总结部分提到)希望得到解答.看懂本文的基础:至少听说过.简单了解过傅里叶变换.离散傅里叶变换(DFT).基于时间抽取的基2 ...
- Java编程思想之高内聚低耦合
文章目录 1 前言 2 低耦合 2.1 耦合性定义 2.2 耦合性分类 2.3 使用低耦合 3 高内聚 3.1 高内聚定义 3.2 内聚性分类 4 示例 5 高内聚,低耦合的系统有什么好处呢 6 降低 ...
- Matlab编程思想和编程训练
目录 一.随机游走问题. 二.指派授课问题 在老师的带领下学习Matlab的编程思想和代码,自己的思维能力还是有所欠缺.老师的代码简洁明了,看着也舒服许多(每题第二份代码为老师代码),跟着进度实时更新 ...
- 状态机编程思想:删除代码注释(支持C/C++和Java)
前言 有时为了信息保密或是单纯阅读代码,我们需要删除注释. 之前考虑过正则表达式,但是感觉实现起来相当麻烦.而状态机可以把多种情况归为一类状态再行分解,大大简化问题.本文就是基于状态机实现的. 删除C ...
最新文章
- 使用Rancher管理Docker
- java信息格式化,Java如何格式化包含时间信息的消息?
- s:select 使用
- 思科——RIP的运用
- 简明python教程 --C++程序员的视角(七):异常
- java 带参数的构造函数_java – mockito模拟一个带参数的构造函数
- springboot scheduled多线程
- 计算机二级access什么时候报名_全国计算机等级考试什么时候报名
- 小米12系列旗舰最新爆料:内藏5000mAh电池但机身更薄
- wordpress 调用css,WordPress折腾记-精简CSS及JS在插件中的调用
- 【转】(Jquery)避免数据相加小数点后产生多位数和计算精度损失
- 网络工程师考试试题及答案+SUV
- Speedpdf——无需下载软件,就可以免费轻松搞定CAJ转word
- 前端--HTML,常用标签学习
- 使用用软通牒(UltraISO)制作U盘启动盘
- super this
- java 求最大公因数_三种算法求最大公约数——Java实现 | 学步园
- android 下 ftp 客户端软件编写(ftp4j)
- Android TabLayout基本使用及完美调整指示器位置的技巧
- 保护眼睛的颜色#CCE8CF
热门文章
- python 第三方库 工具
- 基于Spark MLlib平台的协同过滤算法---电影推荐系统
- Linux如何查看进程、杀死进程、查看端口等常用命令
- Scala学习笔记--Akka
- 搜索引擎爬虫蜘蛛的UserAgent收集
- 由树先序遍历和中序遍历输出其后续遍历
- 一个技术转销售人员的感悟--深刻(转)
- Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
- ginkgo php,【行业资讯】PHP 开发框架 ginkgo v0.1.2 发布
- Access denied for user 'root'@'localhost' 解决流程