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

时间:2014-09-23 18:48:53

标签: matlab geometry discrete-mathematics

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

2 个答案:

答案 0 :(得分:1)

即使您没有向我们展示任何解决您的代码的尝试,但这是一个很好的练习,我不会介意解决。您首先要做的是生成一个以-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网格转换为一维数组。我选择了第二种方法,因为我认为它更干净,但是有些人不介意将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,这意味着此坐标满足它的要求严格低于r0的地理位置代表false,这意味着他们在外面。算法的最后一部分是对所有这个数组进行求和,它给出了9个,以及有多少点严格在r内。


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

答案 1 :(得分:0)

就像一种方法:

  • 定义适合离散点的方阵
  • 如果矩阵点(严格地)在圆圈内
  • ,则定义一个函数/条件
  • 计算真值的数量
祝你好运,如果你在某个地方遇到问题,请随时修改帖子。