我正在尝试创建一组随机点,但限制每个点的数量,即总面积的 1/4。所以想象我的 x 和 y 范围从 0 到 2,以及 0 到 2,我只会在图 block 内获得一定数量的随机生成的点 (0
到目前为止,我认为我可以为每个图 block 创建一个 if 语句,然后如果随机生成的点落在图 block 内,它就会被添加到一个计数中,然后如果计数超过或不超过对于该图 block 足够大,将生成并检查另一个点。这种计数方法似乎不起作用,而不是每个计数都上升,我只得到第 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
如果计数工作正常,我会有一个最小值和最大值,然后使用 if 语句检查计数是否超过最小值和最大值,如果是,则使用 continue 语句继续或不继续。
谁能告诉我为什么每个区域的计数都没有增加?如果我运行这段代码,我会得到 a1_count、a2_count、a3_count = 0,而 a4_count = 8,即使这些点位于 a1、a2 和 a3 边界内。
最佳答案
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
, 无论 x
的值如何.同样对于 1 < y < 2
.
关于matlab - 生成随机点 - 限制总面积中每 block 瓷砖的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840719/