确定景观中所有点与具有特定属性的点之间距离的最快方法

Fastest method for determining the distance of all points from points with a certain attribute in landscape

本文关键字:距离 之间 方法 属性 景观      更新时间:2023-10-16

我目前正在头脑风暴如何计算2D数组中所有点的距离,这些点来自具有特定属性的点集。一个很好的例子(也是我可能使用的一个例子)是带有水池的景观。这个想法是计算这个景观中所有点到水的距离。

这些是我想要遵守的标准和他们的理由:

1)执行速度是我最关心的。地形是动态的,代码需要以半连续的方式运行。我的意思是,有一段时间的地形更新需要不断更新。

内存开销不是我主要关心的问题。这将作为主应用程序运行。

3)它必须能够动态更新。这背后的原因见第一条。这些更新可以本地化。

4)多线程是可能的。我已经广泛使用多线程,因为我的模拟是非常CPU密集的。我宁愿避免它,因为它会加快开发,但如果有必要,我可以这样做。

我已经提出了以下可能的方法,正在寻求反馈和/或替代建议。

1)遍历整个数组,使容器类中对应点的集合位置紧挨着具有特定属性的点。为这些点赋值1,为具有该属性的点赋值0。

2)使用位置查找与它们相邻的下一个距离的点,将它们放置在第二个容器类中。

3)重复这个过程,直到没有点没有符号。

4)直接保存一个单位以外的点列表,以便将来更新。

这个想法基本上是从距离0向外流动,并通过不断缩小循环中的点列表来节省计算。

1)我能想到的唯一一种方法是使用笛卡尔距离公式,但你的方法似乎会占用更少的CPU时间(因为笛卡尔方法必须计算每个点上的每个点)。

2)或者,如果我正确理解了你的愿望,你可以迭代一次,将所有具有你的特殊属性的点保存在容器中(指向它们),然后再迭代一次,只使用从每次迭代到每个保存点的距离公式(然后重复)。如果这个解释不清楚,请评论和询问。很晚了,我很累。

如果你想在后台运行这个比较,你别无选择,只能多线程整个程序。但是,是否将此进程的功能多线程化取决于您。如果您使用我提供的第二个选项,我认为您将减少足够的CPU使用,从而放弃对所讨论的进程执行多线程。我越想越喜欢第二个选择