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(:); 很重要。这会将每个 xy 的 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,这意味着该坐标满足它严格小于r0 的位置表示false,这意味着它们在外面。算法的最后一部分是对所有这个数组求和,得到 9,这就是严格在 r 内的点数。


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

【讨论】:

【参考方案2】:

作为一种方法:

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

祝你好运,如果您在某个地方遇到问题,请随时修改帖子。

【讨论】:

当您将其放入大声笑时,我实际上是在输入我的解决方案。无论如何,我决定解决它,因为这对我来说是一种很好的心理锻炼。无论如何都很好! 如果我家里有matlab,我也会这样做;)

以上是关于MATLAB:返回图形下的离散点数的主要内容,如果未能解决你的问题,请参考以下文章

12月学习进度4/31——计算机图形学拉格朗日插值的MATLAB实现

在matlab画出三维球面并绕轴旋转一定角度

Matlab:如何获取图形句柄中的所有轴句柄?

matlab二维三维图形绘制和坐标轴范围设置

Matlab Simulink系统仿真(01)

刚接触图形图像,对各个工具很迷糊,想知道openGL,GDI,Matlab这些都有啥联系与区别,该怎么使用啊?