我想在matlab中可视化2D square上的所有路径。
这段代码给出了下图,其中包含一个2D正方形和随机分布的1和0。
https://i.hizliresim.com/Ey4G4D.png
每个1必须从上到下连接线。
如果有1,那么有一种方法,我必须绘制线。否则就没有办法停下来。
没有边界元素,每个元素有3种方式。每个元素都可以左侧,右侧或下侧。
左上角的元素可以向右和向下方向移动。
右上角的元素可以向左和向下方向移动。
这是建模算法。
https://i.hizliresim.com/Dy0z0y.jpg
我该如何编写此代码?
我在等你的建议:)
答案 0 :(得分:0)
要获取矩阵/图像中可能路径的信息,您可以使用diff
功能。它计算沿指定维度的两个相邻矩阵元素之间的差异。
存在路径的条件是:
0
1
以下matlab程序将为每个元素创建包含值1
或true
的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
您可以使用这些矩阵在图形显示中绘制路径。