计算网格的重叠

时间:2009-12-07 19:55:15

标签: algorithm

假设我有两张地图,每张都代表一个2D数组。每张地图都包含几个不同的特征(岩石,草,植物,树木等)。我知道这两个地图属于同一个普通地区,但我想知道:1。)如果它们重叠而且2.)如果是这样,那么重叠发生在哪里。有谁知道任何能帮我这么做的算法?

[编辑] 每个功能都完全包含在数组索引中。虽然可能从一块草上辨别(例如)一块岩石,但是不可能从另一块岩石上辨别出一块岩石(或者从另一块岩石中辨认出一块岩石)。

3 个答案:

答案 0 :(得分:1)

对于一张地图,请浏览每个要素并找到最近的其他要素。将它们记录在列表中,存储两个特征中每个特征的类型以及它们之间的dx dy。存储在哈希表或排序列表中。这些现在是位置不变的,因为它们只记录相对距离。

现在为你的第二张地图,开始做同样的事情:选择任何特征,找到它最近的邻居,找到三角洲。在原始地图列表中查找相同的对应关系。如果要素在地图之间共享,您将在列表中找到它,现在您知道地图之间的一个对应关系。如有必要,请重复许多功能。如果地图重叠,结果将给你一个合适的答案,如果是,那么在什么偏移处。

答案 1 :(得分:1)

当在1D中执行此操作时,我会为第一个集合中的每个索引(实际上是一个字符串),尝试在第二个集合中找到最大匹配。如果匹配结束,我有一个重叠(比如act ion ion beam)。

match( A on B ):
    for each i in length(A):
        see if A[i..] matches B[0..]
    if no match found: do the same for B on A.

对于2D,你做同样的事情,基本上:找到A的'边'与B的相对边重叠。只有边不是1D,而是2D:

for each point xa,ya in A:
    find a row yb in B that has a match( A[ya] on B[yb] )
        see if A[ya..] matches B[yb..]

在每种意义上,您需要为2个对角线执行此操作。

答案 2 :(得分:0)

听起来像image registration(维基百科),找到一个可以对齐两个图像的转换(仅在您的情况下是翻译)。有一堆软件可以将这种东西链接到维基百科页面。