我目前正在集思广益,讨论如何在2D数组中计算具有特定属性的点集中所有点的距离。一个很好的例子(也是我可能的用途之一)就是上面有水的风景。这个想法是要计算出该景观中所有点与水的距离。
这些是我要遵守的标准及其推理:
1)执行速度是我最大的担忧。地形是动态的,因此代码需要以半连续的方式运行。我的意思是,有一段时间需要不断更新地形。
2)内存开销不是我的主要关注点。这将作为主要应用程序运行。
3)它必须能够动态更新。参见#1,了解其背后的原因。这些更新可以本地化。
4)多线程是可能的。我的模拟已经占用大量CPU,因此我已经广泛使用了多线程。我宁愿避免使用它,因为它可以加快开发速度,但如有必要,我可以这样做。
我想出了以下可能的方法,并且正在寻找反馈和/或替代建议。
1)遍历整个数组,并在容器类中将与点对应的收集位置放在具有特定属性的位置旁边。为这些点分配值为1,为具有属性的点分配0。
2)使用这些位置查找与它们相邻的,距离最近的点,并将它们放在第二个容器类中。
3)重复此过程,直到没有未签名的点。
4)将点列表直接保存一个单位以备将来更新。
这个想法基本上是从距离0向外流动,并通过不断缩小循环中的点列表来节省计算量。
最佳答案
1)我可以想到的另一种方法是使用笛卡尔距离公式,但是您的方法似乎会减少CPU时间(因为笛卡尔方法必须计算每个点上的每个点) 。
2)或者,如果我正确理解了您的需求,则可以遍历一次,将具有特殊属性的所有点保存在容器中(指向它们),然后再遍历一次,仅使用每个点之间的距离公式迭代到每个保存的点(然后重复)。如果此解释不清楚,请发表评论并询问。已经很晚了,我很累。
如果要在后台运行此比较,则别无选择,只能对整个程序进行多线程处理。但是,是否多线程处理此过程的功能取决于您。如果您使用我提供的第二个选项,那么我想您将减少足够的CPU使用率,从而避免对该进程进行多线程处理。我想得越多,我就越喜欢第二种选择。