工具 spyder(python3.7)  matplotlib库

在进行路径规划仿真的时候,我们希望最后得到的结果不仅仅是一个 填满数字的数组,而是将它变为更加直观的图片

(spyder数组自带染色,很赞)这是我的A*算法得到的最后的结果,数字意义如下:

数字 0 1 3 4 6
含义 障碍物 可以通行 被加入openlist的节点 被加入closelist节点 最后的路径

但是这样的图片表达效果不佳,我寻求了几种可以将它转化为图片的方法

1.利用pylab中的热图,直接将数组作为参数传入即可得到以下图片

代码:

plt.imshow(map_grid, cmap=plt.cm.hot, interpolation='nearest', vmin=0, vmax=10)
plt.colorbar()
xlim(-1, 20)  # 设置x轴范围
ylim(-1, 20)  # 设置y轴范围
my_x_ticks = np.arange(0, 20, 1)
my_y_ticks = np.arange(0, 20, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)
plt.grid(True)
plt.show()

这种方式在表达效果上优于未染色的数组,但是我没有对imshow的热图(heatmap)进行深入研究,所以该没有研究该如何自定义各个部分的颜色,感兴趣的朋友推荐这篇文章给你们https://www.cnblogs.com/dylancao/p/9993953.html

2.直接利用matplotlib进行绘图,利用 plot  scatter以及线条控制来表达我们想要的图像

直接上效果图

黑色表示障碍物,浅蓝色方块表示加入过openlist的位置,绿色表示加入closelist的位置,蓝色线条表示我们最后的路径

(是不是感觉好看很多哈哈哈哈)

代码如下:

def draw_path(map_grid,obstacle,path,closelist,openlist=None):
'''
map_grid为处理好的二维数组
obstacle到openlist都是整数,为其对应的标志。比如0代表obstacle,那么obstacle位置就填0
'''obstacle_x=[]obstacle_y=[]path_x=[]path_y=[]close_list_x=[]close_list_y=[]open_list_x=[]open_list_y=[]for i in range(map_grid.shape[0]):for j in range(map_grid.shape[1]):if map_grid[i][j]==obstacle:   #栅格地图上obstacle为障碍物标识obstacle_x.append(i)obstacle_y.append(j)    if map_grid[i][j]==path:   #栅格地图上path为最后搜索得到路径位置标志path_x.append(i)path_y.append(j)if map_grid[i][j]==closelist:   #栅格地图上closelist为为闭列表中记录的位置标志close_list_x.append(i)close_list_y.append(j)if map_grid[i][j]==openlist:   #栅格地图上openlist为为闭列表中记录的位置标志open_list_x.append(i)open_list_y.append(j)plt.figure(figsize=(10,10))  #为了防止x,y轴间隔不一样长,影响最后的表现效果,所以手动设定等长plt.xlim(-1,map_grid.shape[0])plt.ylim(-1,map_grid.shape[1])my_x_ticks = np.arange(0, map_grid.shape[0], 1)my_y_ticks = np.arange(0, map_grid.shape[1], 1)plt.xticks(my_x_ticks)#我理解为竖线的位置与间隔plt.yticks(my_y_ticks)plt.grid(True)  #开启栅格plt.plot(path_x,path_y,linewidth=3)plt.scatter(open_list_x,open_list_y,s=500,c='cyan',marker='s')plt.scatter(obstacle_x,obstacle_y,s=500,c='k',marker='s')plt.scatter(close_list_x,close_list_y,s=500,c='g',marker='s')plt.title("grid map simulation ")plt.show()

简单来讲就是遍历整个地图,然后将需要绘制的障碍物,路径等都通过列表记录下来,最后通过这几行表现出来,但是传入的mapgrid必须是类似本文第一张图那种经过算法处理过的形式

    plt.plot(path_x,path_y,linewidth=3)plt.scatter(open_list_x,open_list_y,s=500,c='cyan',marker='s')plt.scatter(obstacle_x,obstacle_y,s=500,c='k',marker='s')plt.scatter(close_list_x,close_list_y,s=500,c='g',marker='s')

marker代表点标志,c表示颜色,s表示标志的大小,s的大小需要大家自己手动调整一下,不一定适用。这里有一份速查博客,可以帮你快速选择自己要的颜色和样式

说明:这里选择plot来绘制路径是因为plot会自动连线(除非设置linestyle=''),而scatter是绘制散点图,它不会自动连线。

3.利用OpenCV库进行绘制

这种方法理论上可行(我没有实践)

直接通过img=np.zeros(size,dtype='uint8')来创建画布,然后将得到的二维数组做一个比例变换处理(你不希望自己的图只有几百个像素点吧),依靠OpenCV提供的绘图函数来展示内容

这种方法很麻烦,但是对像素点操作的方式决定了它自由度极高,可以满足很多怪异需求

这里还是推荐大家使用第二种方式,原理简单,在具有一定自由度的情况下也不需要很麻烦操作。

python栅格地图上路径规划作图相关推荐

  1. 基于栅格地图的路径规划(一)基于Matlab二维、三维栅格地图的构建

    基于栅格地图的路径规划(一)基于Matlab二维.三维栅格地图的构建 前言 1.二维栅格地图的创建 1.1.二维栅格地图构建原理 1.2.二维栅格地图构建例程 2.三维栅格地图的创建 2.1.三维栅格 ...

  2. 【A_star三维路径规划】基于matlab A_star算法机器人栅格地图三维路径规划【含Matlab源码 190期】

    一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶 ...

  3. 百度地图no result available_【整理之路二】百度地图的路径规划和调用本机地图导航...

    推荐看完之后注意一下最后的东西 一.细说百度地图的路径规划 路径规划主要有这么几种 1.公交路径规划 1.1 市内公交规划(暂时不在这里说) 1.2 跨市/省公交规划 // 导入头文件 #import ...

  4. 【整理之路二】百度地图的路径规划和调用本机地图导航

    一.细说百度地图的路径规划 路径规划主要有这么几种 1.公交路径规划 1.1 市内公交规划(暂时不在这里说) 1.2 跨市/省公交规划 // 导入头文件#import <BaiduMapAPI_ ...

  5. python画地图经纬度_如何用python画地图上的标注线?

    我们平时看文章的时候会遇到一些不太好理解的地方,如果上面有标注那就事半功倍了.当然在地图中也是如此.之前我们学会了很多画图的技巧,但是忽略了标注这种细节的重要作用.小编经过一番学习和整理,清楚了这部分 ...

  6. python在地图上标注点_怎样用python画地图上的标注线

    怎样用python画地图上的标注线 发布时间:2020-11-16 09:52:53 来源:亿速云 阅读:90 作者:小新 小编给大家分享一下怎样用python画地图上的标注线,希望大家阅读完这篇文章 ...

  7. Android 百度地图之路径规划

    我集成了百度地图驾车路径规划,但总是不规划,下面我来简单说说吧. 首先就是按照百度官方文档按步骤复制粘贴对应的代码到自己工程. 百度地图驾车路径规划网址:https://lbsyun.baidu.co ...

  8. 高德地图驾车路径规划API,获取两地点之间的驾车里程和时间

    高德地图驾车路径规划API,获取两地点之间的驾车里程和时间 import pandas as pd import requests import jsondef get_dis_tm(origin, ...

  9. python地图标点_如何用python画地图上的标注线?

    我们平时看文章的时候会遇到一些不太好理解的地方,如果上面有标注那就事半功倍了.当然在地图中也是如此.之前我们学会了很多画图的技巧,但是忽略了标注这种细节的重要作用.小编经过一番学习和整理,清楚了这部分 ...

最新文章

  1. 维基百科上的算法和数据结构链接很强大
  2. 漫画:如何辨别二逼互联网公司!?
  3. 使用apache模块rewrite_module
  4. c语言的运算符表格,C语言教案(运算符和表格达式).ppt
  5. Android 仪表盘
  6. 作者:马朝辉(1974-),男,华南师范大学计算机学院博士生。
  7. DeepFaceLab报错,CUDA driver is insufficient 解决方法!
  8. 苹果:两个 M1 Max 拼一块儿,“史上最强 PC 芯片”M1 Ultra 就出来了!
  9. Matlab Tricks(二十)—— Hilbert matrix 的创建
  10. RabbitMQ实例教程:用Java搞定工作队列
  11. 苹果手机录屏软件_手机端录屏软件哪个好 手机上最好的录屏软件
  12. gpu超算算法_2018电磁仿真(HFSS、CST、FEKO)单机集群并行计算特点分析与完美解决方案...
  13. JESD204B协议基础知识
  14. 经纬财富:东莞炒白银怎么做好风险控制
  15. 如何打印网上的文章资料,网上文章怎么打印
  16. 利用google地图获取位置经纬度坐标
  17. Angular 个人深究(三)【由InputOutput引起的】
  18. rust新版组队指令_腐蚀rust新版服务器指令大全 腐蚀指令一览
  19. 推特营销|推特群推你有无限可能
  20. HDMI设计5--GT Transceiver的总体架构整理

热门文章

  1. 简单聊下STM32F103的GPIO
  2. 2021-12-15 虚拟机WMware windows7 安装WMware Tools安装向导提前结束。安装WMware Tools成功后客户机与宿主机可以复制文件和共享剪切板。
  3. 写给ERP选型的伙伴们!
  4. linux 配置trunk网络
  5. Android Studio 单刷《第一行代码》系列目录
  6. Pig股票交易数据处理
  7. 项目角色职责分配表 项目角色划分
  8. 视频教程-SAP S4 HANA CO 成本模块学习-ERP
  9. DRF访问控制(RBAC)、JWT认证
  10. Windows Media Player 网页播放器 参数含义