在栅格地图中,画出一条路径及<MATLAB>实现

本文介绍了如何在栅格地图上直观地展示由路径规划算法(如Dijkstra算法)得出的路径。首先,通过建立栅格地图和邻接矩阵来表示节点间的距离关系。接着,确定路径节点与栅格中心的坐标对应关系,并使用MATLAB代码将路径绘制在地图上。具体步骤包括:定义节点坐标,画出路径节点间的直线,以及演示Dijkstra算法寻找从栅格1到栅格100的最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎来到 < Haoh-Smile > 的博客,觉得受用客官就点个赞评论一下呗!

在栅格地图中画出一条路径
在数字化描述了环境地图以后,运用路径规划算法在建立好的栅格地图中找到一条两节点的路径,其算法给出的只是相应的节点数字量,如何更直观的在栅格地图中画出这条路径呢?下面我们就实现一下在栅格地图中画出我们运用相应算法得到的一条路径。
首先根据自己所应用的环境信息建立相应的栅格电子地图,建立栅格地图的方法详解请见链接栅格法建立环境地图。我们应用该链接中建立的栅格地图为例:
栅格地图
其栅格地图中的每一个栅格代表了一个路径节点,一条路径是由多个节点所组成。在栅格地图中画出一条路径的关键就是要找到算法给出路径节点与栅格地图中每个栅格的对应坐标轴位置关系,找到这种对应关系后,就可以在栅格地图中画出这条路径了。比如在该例中左下角的栅格数字标识为1,那么我规定其栅格为节点1的位置,数字标识2表示节点2的位置,以此类推。根据这样的节点位置建立相应的邻接矩阵,描述个节点间的位置距离关系,规定各水平垂直相邻节点中心的距离为1,黑色栅格为障碍不可达区域,建立相应邻接矩阵的方法详见链接建立单位距离邻接矩阵
如上所述,各节点与各栅格的坐标位置关系是什么呢?比如我要画栅格1到栅格2的一条路径,那么我要在栅格1的中心位置引出一条线,这条线终止于栅格2的中心位置,也就是是说各节点在栅格地图上的位置是对应栅格中心的位置坐标,例节点1对应栅格1的位置坐标(0.5,0.5),节点2对应栅格2的位置坐标(1.5,0.5)。找到这种关系后,在各相邻路径节点画出一条直线就可以画出该路径了。这种关系的描述用MATLAB实现如下:`

%%%%%%%%%%%%%%%%%%%%%根据栅格标识,得到相应的x,y坐标%%%%%%%%%%%%%%%%%%%%%

function [x y]=Get_xy(distance,path,map)
% distance 路径长度 若不可达路径不执行该函数程序
% path 路径节点向量
% map  栅格地图信息
if(distance~=Inf)                %判断路径是否可达
  n = size(map);
  N = size(path,2);
   for(i=1:N)     %根据栅格标识,得到相应的x,y坐标
    if rem(path(i),n(2))==0
       x(i)=n(2);
       y(i)= floor(path(i)/n(2));
    else
       x(i)= rem(path(i),n(2));
       y(i)= floor(path(i)/n(2))+1;
    end
   end
else
    x = 0;
    y = 0;
end

执行以上程序就可以得到个路径节点在栅格地图中所对应的位置信息,然后根据这些节点的位置信息在栅格地图上将其画出,MATLAB实现如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%画出路径%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function  Plot(distance,x,y)
if(distance~=Inf)            %判断路径是否可达
     plot(x-0.5,y-0.5,'r');
    hold on
else
    disp('路径不可达');
    hold on
end

下面以Dijkstra算法为例,找到栅格1到栅格100的一条路径,其实现如下:

map=[0 0 0 1 0 0 1 0 0 0;
     1 0 0 0 0 1 1 0 0 0;
     0 0 1 0 0 0 1 1 0 0;
     0 0 0 0 0 0 0 0 0 0;
     0 0 0 0 0 1 0 0 1 0;
     1 0 0 0 0 1 1 0 0 0;
     0 0 0 1 0 0 0 0 0 0;
     1 1 1 0 0 0 1 0 0 0;
     0 0 0 0 0 1 1 0 0 0;
     0 0 0 0 0 1 1 0 0 0;];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立环境矩阵map%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DrawMap(map);%得到环境地图
W=G2D(map);   %得到环境地图的邻接矩阵
t1 =  clock;  %开启计时
[distance,path]=dijkstra(W,1,100);%设置起始栅格,得到最短路径距离以及栅格路径
[x,y]=Get_xy(distance,path,map);   %得到栅格相应的x,y坐标
t2 = clock;  %结束计时
Plot(distance,x,y);   %画出路径
time=etime(t2,t1); %计算时间
xlabel(['运行时间 TIME=' ,num2str(time),'s'],'Fontsize',16); %输出运行时间

运行结果如下:
路径图
其中函数程序:
DrawMap(map) 详见建立栅格地图
W=G2D(map);详见建立邻接矩阵
[distance,path]=dijkstra(W,1,100)详见Dijkstra算法

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haoh-Smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值