可视化2D正方形上的路径

时间:2017-12-07 23:11:27

标签: matlab path

我想在matlab中可视化2D square上的所有路径。

这段代码给出了下图,其中包含一个2D正方形和随机分布的1和0。

https://i.hizliresim.com/Ey4G4D.png

每个1必须从上到下连接线。

如果有1,那么有一种方法,我必须绘制线。否则就没有办法停下来。

没有边界元素,每个元素有3种方式。每个元素都可以左侧,右侧或下侧。

左上角的元素可以向右和向下方向移动。

右上角的元素可以向左和向下方向移动。

这是建模算法。

https://i.hizliresim.com/Dy0z0y.jpg

我该如何编写此代码?

我在等你的建议:)

1 个答案:

答案 0 :(得分:0)

问题分析

要获取矩阵/图像中可能路径的信息,您可以使用diff功能。它计算沿指定维度的两个相邻矩阵元素之间的差异。 存在路径的条件是:

  1. 元素与其邻居之间的差异必须为0
  2. 元素本身必须为1
  3. 解决方案

    以下matlab程序将为每个元素创建包含值1true的3个矩阵,并为其邻居提供路径。

    matrix = logical([1 1 1 1 0; ...
              1 1 0 1 1; ...
              0 0 0 1 0; ...
              0 0 1 1 0])
    
    hasPathtoRight = false(size(matrix));
    hasPathtoRight(:,1:end-1) = (diff(matrix,1,2)==0) & (matrix(:,1:end-1)==1)
    
    hasPathtoLeft = false(size(matrix));
    hasPathtoLeft(:,2:end) = (diff(matrix,1,2)==0) & (matrix(:,2:end)==1)
    
    hasPathDown = false(size(matrix));
    hasPathDown(1:end-1,:) = (diff(matrix,1,1)==0) & (matrix(1:end-1,:)==1)
    

    结果

    示例矩阵的结果如下所示:

    matrix =
    
      1  1  1  1  0
      1  1  0  1  1
      0  0  0  1  0
      0  0  1  1  0
    
    hasPathtoRight =
    
      1  1  1  0  0
      1  0  0  1  0
      0  0  0  0  0
      0  0  1  0  0
    
    hasPathtoLeft =
    
      0  1  1  1  0
      0  1  0  0  1
      0  0  0  0  0
      0  0  0  1  0
    
    hasPathDown =
    
      1  1  0  1  0
      0  0  0  1  0
      0  0  0  1  0
      0  0  0  0  0
    

    您可以使用这些矩阵在图形显示中绘制路径。