如何选择包含在一个半径内的最大数量的分散点?

建立示例

在提出问题之前,我试图在任何地方都找到解决方案。我的问题是,我不太擅长数学或统计学,以便了解任何给定的算法是否有助于解决问题。

在我的例子中,我有一个看起来像散点图的图。只是在笛卡尔坐标平面上随机放置了一堆点。我想能够在这个平面上画一个特定半径的圆。圆必须包含尽可能多的点。

我应该采取哪些步骤来计算绘制这个圆的最优点?

我在寻找...

我很想知道我必须采取的一系列步骤,以便确定在图形上开始绘制的位置(圆的中心点)。如果您有代码,我非常擅长解密我不必要掌握的语言,但我将在Lua中编写此代码(不幸的是,我没有访问C部分的权限)。

我真的想要了解解决方案的工作原理,因此我将感激任何来源或解释。仅供您参考,性能非常重要,但在这一点上,我正在寻找任何解决方案。

奖励 :)

因为我正在编写这个,我想问一下其他我希望我的代码执行的高级功能。但是,当我真正进入门槛时,我总是可以之后解决这些问题。

  • 靠近圆心的点比靠近圆心的点更加重要。重量可以简单地是一个线性函数,其中如果半径为10,则与中心点相距1是全重量的10%,与中心点相距2是全重量的20%。与中心相隔10的距离将为100%重量。

  • 引入时间,圆的中心也是图形上的点(这个点不是其他点的一部分,应该不与它们一起计算)。圆的中心以恒定的速度移动,您必须选择靠近中心的点,因为所有点的权重都会随着时间的流逝而衰减。所以你画圆越快越好。(这是高度理论的,我都不确定衰减会是什么样子)。

非常感谢您阅读并考虑我的问题!我可以提供附加详细信息或回答您可能有的任何问题。

点赞
用户240457
用户240457

有一种可能更快的找到最佳圆的方法,需要更多数学知识,并且扩展到您的两个确切点中的第一个。

取一个覆盖您感兴趣区域的网格,并在您绘制点的网格中放置1,在您没有绘制的地方放置0。现在,您需要为网格中的每个点计算一个分数。您可以通过将网格中每个点的值乘以取决于该点离您要打分的点有多远的加权值,然后将结果求和来完成这个任务。这涵盖了您的基本问题(在圆内点的权重为1,否则为0),以及您的第一个高级问题,其中加权变化更加渐进。

从这个角度看问题,您需要应用到网格的二维滤波器。在应用它之后,您只需要在结果中找到得分最高的点。明显的方法做起来会很慢,但事实证明您可以使用快速傅里叶变换加速这种事情,并且您可以让数学库来计算这个。

如果您没有练习数学或统计学,您将需要一个好的解释 - 比我能提供的好。这已经做了很多次了,但我没有找到一个我真正喜欢的解释。您可以看看http://www.analog.com/static/imported-files/tech_docs/dsp_book_Ch24.pdf,这也被引用在http://archive.gamedev.net/archive/reference/programming/features/imageproc/page2.html中。

2013-07-21 08:08:59