Ras*_*hid 5 random matlab loops path while-loop
我想编写一个代码来生成一个给定大小的矩形的随机路径.
我将从这一点开始,(0,0)然后去up或right达到xlim和ylim.
这是我的代码,
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,它在其中一个x或y达到它的极限时结束.
所以提供的工作很好x = y.
但是,当y > x路径更有可能xlim更快到达时.
x = 10, y = 10我跑了12次(我把它看起来更好看!),

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

正如你所看到的,在后一种情况下我失去了随机性,因为x达到它的极限的概率增加了.
任何建议如何保持随机性的情况下x~=y?
谢谢.
你总是需要向右迈 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)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |