确定景观中所有点与具有特定属性的点之间距离的最快方法
Fastest method for determining the distance of all points from points with a certain attribute in landscape
我目前正在头脑风暴如何计算2D数组中所有点的距离,这些点来自具有特定属性的点集。一个很好的例子(也是我可能使用的一个例子)是带有水池的景观。这个想法是计算这个景观中所有点到水的距离。
这些是我想要遵守的标准和他们的理由:
1)执行速度是我最关心的。地形是动态的,代码需要以半连续的方式运行。我的意思是,有一段时间的地形更新需要不断更新。
内存开销不是我主要关心的问题。这将作为主应用程序运行。3)它必须能够动态更新。这背后的原因见第一条。这些更新可以本地化。
4)多线程是可能的。我已经广泛使用多线程,因为我的模拟是非常CPU密集的。我宁愿避免它,因为它会加快开发,但如果有必要,我可以这样做。
我已经提出了以下可能的方法,正在寻求反馈和/或替代建议。
1)遍历整个数组,使容器类中对应点的集合位置紧挨着具有特定属性的点。为这些点赋值1,为具有该属性的点赋值0。
2)使用位置查找与它们相邻的下一个距离的点,将它们放置在第二个容器类中。
3)重复这个过程,直到没有点没有符号。
4)直接保存一个单位以外的点列表,以便将来更新。
这个想法基本上是从距离0向外流动,并通过不断缩小循环中的点列表来节省计算。
1)我能想到的唯一一种方法是使用笛卡尔距离公式,但你的方法似乎会占用更少的CPU时间(因为笛卡尔方法必须计算每个点上的每个点)。
2)或者,如果我正确理解了你的愿望,你可以迭代一次,将所有具有你的特殊属性的点保存在容器中(指向它们),然后再迭代一次,只使用从每次迭代到每个保存点的距离公式(然后重复)。如果这个解释不清楚,请评论和询问。很晚了,我很累。
如果你想在后台运行这个比较,你别无选择,只能多线程整个程序。但是,是否将此进程的功能多线程化取决于您。如果您使用我提供的第二个选项,我认为您将减少足够的CPU使用,从而放弃对所讨论的进程执行多线程。我越想越喜欢第二个选择
- 用C++程序计算圆锥体的体积、球体的体积、八边形的面积和两点之间的距离
- 计算所有对之间的曼哈顿距离
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 两个有符号数字之间的距离
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 计算两个迭代器之间的距离时"Vector Iterators Incompatible"
- 查找彼此之间具有不同最小距离的随机数
- 相同字符之间的最小距离
- 如何排列二进制字符串以最小化它们之间的距离
- 堆和堆栈之间的距离
- 树节点之间的最大距离中的运行时错误
- 最接近的字符串:在字符串阵列中找到2个字符串之间的最小距离
- 尝试查找数组中点之间的最小距离时的随机垃圾输出
- c++ 从大型数组中读取 3D 坐标并计算它们之间的距离
- 在 OpenCV 中计算 SURF 功能之间的距离
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 是否有C 功能来计算两个索引之间的距离
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- 2 点分配之间的 C++ 距离
- 使用指针计算三角形各点之间的距离