分享

matlab:栅格地图转化为邻接矩阵

 felwell 2019-07-01
  1. function D=G2D(G) %邻接矩阵就是每个栅格之间的距离
  2. [m,n]=size(G); %返回矩阵G的尺寸 并将行返回到m中,列返回到n中
  3. N=m*n; %元素个数
  4. D=zeros(N,N); %生成一个n*n的0矩阵
  5. for Dx=1:N
  6. for Dy=Dx:N
  7. x1=ceil(Dx/n);%返回不小于x的最小整数值
  8. y1=mod(Dx,n); %Dx对n取余
  9. if y1==0
  10. y1=n;
  11. end
  12. x2=ceil(Dy/n);
  13. y2=mod(Dy,n);
  14. if y2==0
  15. y2=n;
  16. end
  17. if Dx==Dy
  18. D(Dx,Dy)=inf;
  19. elseif (G(x1,y1)==1) || (G(x2,y2)==1);
  20. D(Dx,Dy)=inf;
  21. else
  22. if (mod(Dx,n) ==1)
  23. if(Dx==1)
  24. if (Dy-Dx==1) || (Dy-Dx==n)
  25. D(Dx,Dy)=1;
  26. elseif (Dy-Dx==n+1)
  27. D(Dx,Dy)=sqrt(2);
  28. else
  29. D(Dx,Dy)=inf;
  30. end
  31. elseif(Dx==N-n+1)
  32. if (Dy-Dx==1) || (Dx-Dy==n)
  33. D(Dx,Dy)=1;
  34. elseif (Dx-Dy==n-1)
  35. D(Dx,Dy)=sqrt(2);
  36. else
  37. D(Dx,Dy)=inf;
  38. end
  39. else
  40. if (Dy-Dx==1) || (Dy-Dx==n) || (Dx-Dy==n)
  41. D(Dx,Dy)=1;
  42. elseif (Dx-Dy==n-1) || (Dy-Dx==n+1)
  43. D(Dx,Dy)=sqrt(2);
  44. else
  45. D(Dx,Dy)=inf;
  46. end
  47. end
  48. elseif mod(Dx,n) ==0
  49. if(Dx==n)
  50. if (Dx-Dy==1) || (Dy-Dx==n)
  51. D(Dx,Dy)=1;
  52. elseif (Dy-Dx==n-1)
  53. D(Dx,Dy)=sqrt(2);
  54. else
  55. D(Dx,Dy)=inf;
  56. end
  57. elseif(Dx==N)
  58. if (Dx-Dy==1) || (Dy-Dx==n)
  59. D(Dx,Dy)=1;
  60. elseif (Dy-Dx==n+1)
  61. D(Dx,Dy)=sqrt(2);
  62. else
  63. D(Dx,Dy)=inf;
  64. end
  65. else
  66. if (Dx-Dy==1) || (Dy-Dx==n) || (Dx-Dy==n)
  67. D(Dx,Dy)=1;
  68. elseif (Dy-Dx==n-1) || (Dx-Dy==n+1)
  69. D(Dx,Dy)=sqrt(2);
  70. else
  71. D(Dx,Dy)=inf;
  72. end
  73. end
  74. else
  75. if (Dx-Dy==1) || (Dy-Dx==1) || (Dy-Dx==n) || (Dx-Dy==n)
  76. D(Dx,Dy)=1;
  77. elseif (Dx-Dy==n+1) || (Dy-Dx==n+1) || (Dy-Dx==n-1) || (Dx-Dy==n-1)
  78. D(Dx,Dy)=sqrt(2);
  79. else
  80. D(Dx,Dy)=inf;
  81. end
  82. end
  83. end
  84. end
  85. end
  86. for i=1:N
  87. for j=i:N
  88. if(i~=j)
  89. D(j,i)=D(i,j);
  90. end
  91. end
  92. end

        传入0/1矩阵形式的栅格地图(如下图中的[1 0 0;0 0 0;0 0 0]矩阵<右图,黑色为障碍物1>),将其转换为如下图所示的邻接矩阵,1表示障碍物,不可达;0表示没有被占据,可以通过。则1号与所有元素都不可达为inf,并且将自身与自身也设为不可达:

 

其在蚁群算法路径规划中的应用可参考https://blog.csdn.net/KantsWang/article/details/83753515

代码均为他人代码,只作学习参考之用。

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多