我正在尝试创建一组随机点,但限制总面积的每个说法中的数字,即1/4。想象我的x& y范围从0到2,0到2,我只会在图块中获得一定数量的随机生成点(0
到目前为止,我认为我可以为每个图块创建一个if语句,然后如果随机生成的点落在图块内,它会被添加到计数中,如果计数超过或不是对于该磁贴足够大,将生成并检查另一个点。这种计数方法似乎不起作用,而不是每个计数都在增加,我只得到第4层的计数增加。
n = 8;
used = [];
k = 0;
a1_count = 0;
a2_count = 0;
a3_count = 0;
a4_count = 0;
while k<n
x = rand*2;
y = rand*2;
if 0 < x < 1 && 0 < y < 1
a1_count = a1_count + 1;
end
if 1 < x < 2 && 0 < y < 1
a2_count = a2_count + 1;
end
if 0 < x < 1 && 1 < y < 2
a3_count = a3_count + 1;
end
if 1 < x < 2 && 1 < y < 2
a4_count = a4_count + 1;
end
used(end+1,:) = [x;y];
k = k+1;
end
如果计数工作正常,我会得到一个分钟&amp; max,然后使用if语句检查计数是否超出min&amp; max,如果是这样,请使用continue语句继续。
有谁能告诉我为什么每个区域的计数都没有增加?如果我运行此代码,我得到a1_count,a2_count,a3_count = 0,而a4_count = 8,即使这些点位于a1,a2和a3边界内。
答案 0 :(得分:4)
0 < x < 1
形式的表达式需要写为0 < x && x < 1
。
0 < x < 1
在语法上有效,因此不会标记任何警告或错误:它与(0 < x) < 1
相同。请注意,(0 < x)
本身为0或1。
这解释了为什么1 < x < 2 && 1 < y < 2
始终评估为1,因此a4_count
始终增加:1 < x < 2
为(1 < x) < 2
,始终为{{1}无论1
的值如何。同样适用于x
。