【问题标题】:grid point algorithm (finding the point in grid)网格点算法(在网格中寻找点)
【发布时间】:2013-05-28 23:58:17
【问题描述】:

我正在寻找一种算法,例如closest pair of points algorithm

我没有设置所有点之间的任意距离,而是设置了一个网格系统,其中 4 个点分别是右上角、右下角、左上角和左下角。这使所有点之间的距离保持不变。

例如,如果我要在这个网格上放置一个外部点,我需要找到它所在的网格正方形,假设通过找到最近的 4 个点(给我网格正方形的端点)。

我打算实现最近点的算法,但由于这些点之间的距离始终相同,我不知道这是否值得采用更有效的不同算法。

我真的不需要对答案的详细解释,只需要指出正确的方向即可。

【问题讨论】:

  • 澄清一下;你有一个正方形网格,你想知道任意点位于哪个正方形? (如果不是这个,那么可能值得在您的帖子中添加图表......)
  • 不,这正是我需要做的。我认为找到网格的 4 个端点(右上角、右下角、左上角和左下角)是最有效的方法。

标签: algorithm euclidean-distance


【解决方案1】:

我假设这是二维的?很简单,您可以这样做——我在大型数据挖掘项目中使用了类似的技术来快速优化空间聚类。

将您的坐标空间划分为 X 和 Y 方向上固定数量的网格线(您似乎已经这样做了,通过等间距这 4 个点)。

当您插入一个点时,将其在 X 和 Y 方向上与原点的距离(整数除法)除以您的网格步长间隔。然后你会留下两个坐标来标识最近的 X/Y 网格交叉点。使用余数来确定您的点属于网格交点的哪一侧。

如果你想变得非常复杂,你可以开始使用 kD-Trees 等......但我认为这个例子足够简单,不需要任何更复杂的空间分区。

【讨论】:

  • 感谢您的建议,只是一些澄清,当您说 将其在 X 和 Y 方向上与原点的距离除以您的网格步长间隔时。 您的意思是除它的 x 和 y 分量表示 5(每个网格正方形的大小)这会给我 (x,y) * 5 是最近的网格交叉点吗?
  • 是的,假设您在 (100,50) 有一个点。您的网格设置为在 X 和 Y 中具有相同的宽度(在本例中为 5),您将除以 100/5 = 20、50/5 = 10。您的点实际上将正好位于网格单元的边界上(20 ,10)。这会让你知道你可以将它插入到那个单元格中;如果 X 或 Y 方向有余数,您可能希望将其推入该方向的下一个最高单元格。
  • 感谢您的帮助。这似乎比我想的要直截了当。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多