通过矩形的随机路径

Ras*_*hid 5 random matlab loops path while-loop

我想编写一个代码来生成一个给定大小的矩形的随机路径.

我将从这一点开始,(0,0)然后去upright达到xlimylim.

这是我的代码,

y = 10;
x = 10;
yOld = 0;
xOld = 0;
figure
axis([0 x 0 y])
while yOld < y && xOld < x
    DirectionChange = randi([0 1],1);
    if DirectionChange == 0
        yNew = yOld + 1;
        xNew = xOld;
    else
        xNew = xOld + 1;
        yNew = yOld;
    end
    line ([xOld xNew],[yOld yNew],'LineWidth',3);hold on
    yOld = yNew;
    xOld = xNew;
end
line ([xNew x],[yNew y],'LineWidth',3);hold off 
Run Code Online (Sandbox Code Playgroud)

代码有一个while loop,它在其中一个xy达到它的极限时结束.

所以提供的工作很好x = y.

但是,当y > x路径更有可能xlim更快到达时.

x = 10, y = 10我跑了12次(我把它看起来更好看!),

在此输入图像描述

设置x = 10, y = 20,我明白了,

在此输入图像描述

正如你所看到的,在后一种情况下我失去了随机性,因为x达到它的极限的概率增加了.

任何建议如何保持随机性的情况下x~=y

谢谢.

Nei*_*ter 3

你总是需要向右迈 x 步,向上迈 y 步。因此,创建一个包含这些步骤作为编码指令的数组(一个简单的数组在这里就可以了,我们可以使用 0 表示水平步骤,1 表示垂直步骤)。然后打乱数组。这保证了无需任何调整即可到达拐角,并且所有可能的路径都将具有相同的可能性(尽可能随机)。

x = 10;
y = 20;
steps = [ zeros(1,x) ones(1,y) ];
steps = steps( randperm(x+y) );

figure
hold on;

xOld = 0;
yOld = 0;
axis([0 x 0 y])
for step = steps,
    if (step == 1)
        yNew = yOld + 1;
        xNew = xOld;
    else
        xNew = xOld + 1;
        yNew = yOld;
    end
    line ([xOld xNew],[yOld yNew],'LineWidth',3);
    yOld = yNew;
    xOld = xNew;
end
line ([xNew x],[yNew y],'LineWidth',3);
hold off 
Run Code Online (Sandbox Code Playgroud)