MATLAB:返回图形下的离散点数



我需要编写一个函数,该函数将取半径r,并返回半径r的圆内的整数个离散点,以原点为中心。任何提示都将不胜感激。

尽管您还没有向我们展示任何解决代码的尝试,但这是一个很好的练习,我不介意处理。首先可以生成一个以-r+r之间的原点为中心的坐标正方形网格。请记住,如果我正确解释了您的问题,2D网格中每个点之间的间距为1。

一旦你这样做,你就可以找到欧几里得距离严格小于r的位置,然后返回满足这个条件的点数。要生成点的方形网格,请使用meshgrid。假设您已经在r中定义了半径,那么您将执行以下代码:

[x,y] = meshgrid(-r:r, -r:r);
x = x(:);
y = y(:);
num_points = sum(x.^2 + y.^2 < r^2);

x = x(:);y = y(:);是重要的。这将每个xy的2D网格转换为单列矢量。具体来说,它获取矩阵的每一列,并将所有列从上到下堆叠,形成一个向量。它使分析更容易。原因是,如果我们试图在2D矩阵上使用sum,它只能在一个方向上求和。可以对所有列单独求和,也可以对所有行单独求和。由于要对整个数组求和,因此可以调用sum两次,也可以将2D网格转换为1D数组堆栈。我选择了第二种方法,因为我认为它更干净,但有些人也不介意将sum调用链接在一起。。。这只是一种风格偏好。

一旦你这样做,我们只需检查欧几里得距离是否小于半径。注意,我计算欧几里得平方距离是为了避免计算平方根。它将节省计算时间。然后,我们对所有实例求和,这将定义半径内有多少点。

举个例子,假设我们的半径是r = 2。这就是我们的meshgrid点的样子:

r = 2;
[x,y] = meshgrid(-r:r, -r:r)
x =
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
y =
    -2    -2    -2    -2    -2
    -1    -1    -1    -1    -1
     0     0     0     0     0
     1     1     1     1     1
     2     2     2     2     2

对于2D网格中的每个坐标,我们在每个点都有一个相关的(x,y)对。我们得到的最后点数是:

num_points = 
 9

这是有意义的,因为严格小于2的点应该只是以原点为中心的3 x 3块。如果你想确定,在你把坐标转换成1D矢量之前,让我们先看看网格是什么样子:

[x,y] = meshgrid(-r:r, -r:r);
disp(x.^2 + y.^2 < r^2);
 0     0     0     0     0
 0     1     1     1     0
 0     1     1     1     0
 0     1     1     1     0
 0     0     0     0     0

1的位置表示true,这意味着该坐标满足其严格小于r的条件。0的位置表示false,这意味着它们在外面。算法的最后一部分是对所有数组求和,这给了我们9个,这就是严格在r内的点的数量。


希望这能有所帮助。祝你好运

作为一种方法:

  • 定义一个适合离散点的方形矩阵
  • 如果矩阵点(严格地)在圆内,则定义一个函数/条件
  • 计算真值的数量

祝你好运,如果你在某个地方有问题,可以随意修改帖子。

最新更新