matlab - 生成随机点 - 限制总面积中每 block 瓷砖的数量

标签 matlab random

我正在尝试创建一组随机点,但限制每个点的数量,即总面积的 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/

相关文章:

python - 将 python ndarray 转换为 matlab 文件

matlab - 将数据 block 读入matlab数组

matlab - 单元格元素作为 varargin 函数的逗号分隔输入参数

java - 播种 Java Random 时的奇怪行为

javascript - 使用 Javascript 获取 2 个数字之间的随机数,但不太可能具有特定范围

matlab - 频率增加的 Simulink 正弦波

matlab - Matlab中的最大池操作?

java - 如何对依赖于随机生成的数字的代码进行单元测试?

java - 具有给定长度单元测试的随机字符串

python - 洗牌一小组项目