MATLAB:返回图形下的离散点数
Posted
技术标签:
【中文标题】MATLAB:返回图形下的离散点数【英文标题】:MATLAB: Return the number of discrete points under a graph 【发布时间】:2014-09-23 18:48:52 【问题描述】:我需要编写一个函数,该函数将采用半径 r 并严格返回以原点为中心的半径为 r 的圆内的整数个离散点。任何提示将不胜感激。
【问题讨论】:
到目前为止你做了什么?请给我们看。有代表性的图片也很好:) 目前我没有太多的代码。但我的想法是我会有一个从-R到R的整数范围代表每个x和y,然后需要计算满足x^2 + y^2 @user2049004 - 你的想法是正确的。你只需要找出正确的函数来生成你的坐标:) 见我的帖子。 【参考方案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(:);
很重要。这会将每个 x
和 y
的 2D 网格转换为单列向量。具体来说,它采用矩阵的每一列,并将所有列从上到下堆叠以形成一个向量。它使分析更容易。原因是如果我们尝试在二维矩阵上使用sum
,它只能在一个方向上求和。您可以单独对所有列求和,也可以对所有行单独求和。由于您想对整个数组求和,您可以调用sum
两次,或者将您的二维网格转换为一维数组的堆栈。我选择了第二种方法,因为我认为它更简洁,但有些人也不介意将 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
内的点数。
希望这会有所帮助。祝你好运!
【讨论】:
【参考方案2】:作为一种方法:
定义一个适合离散点的方阵 如果矩阵点(严格)在圆内,则定义一个函数/条件 统计真值的个数祝你好运,如果您在某个地方遇到问题,请随时修改帖子。
【讨论】:
当您将其放入大声笑时,我实际上是在输入我的解决方案。无论如何,我决定解决它,因为这对我来说是一种很好的心理锻炼。无论如何都很好! 如果我家里有matlab,我也会这样做;)以上是关于MATLAB:返回图形下的离散点数的主要内容,如果未能解决你的问题,请参考以下文章