繁体   English   中英

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

[英]MATLAB: Return the number of discrete points under a graph

我需要编写一个函数,该函数将采用半径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网格转换为一维数组的堆栈。 我选择第二种方法是因为我认为它更干净,但是有些人也不介意将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块。 如果要确定的话,在将坐标转换为一维矢量之前,让我们先看一下网格的外观:

[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内严格存在的点数。


希望这可以帮助。 祝好运!

作为一种方法:

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

祝您好运,如果您遇到问题,请随时修改此信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM