从矩阵获取区域/区域边界

问题描述:

听起来对我来说我有一个非常基本的需求:提取组成矩阵的区域的坐标。从矩阵获取区域/区域边界

让我举个例子。这里是一些矩阵:

| A | B | D | E | F | G | H | I | J | 
| 1 | 0 | 0 | 0 | 2 | 2 | 2 | 4 | 4 | 4 | 
| 2 | 0 | 0 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 
| 3 | 0 | 0 | 2 | 2 | 2 | 3 | 3 | 4 | 4 | 
| 4 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 
| 5 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 
| 6 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 
| 7 | 1 | 0 | 0 | 0 | 1 | 1 | 3 | 0 | 4 | 
| 8 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 
| 9 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 
| 10| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 

而且我想获得一个数组的边界和每个区域的值(不需要特定的顺序)。

举例左上区域:

  • 值:0
  • 界限:{A1,D1,B2,B3,13}

你知道一些库回答这个需要还是应该我自己编码?

+0

我不确定我了解您的示例。为什么A1是一个边界,但不是B1或A2?如果边不计为边界A1不应该是边界。 –

+0

@Ron Warholic:当一条线存在时,我只给了极端。的确,你的建议也适合。 – apneadiving

我自己编码,不确定是否有库。

我会考虑每个地区的每个点。然后(我认为)这应该工作:

if (surrounding 8 squares has at least one with different region) 
{ 
    for each 3 squares, above, below, left and right 
    { 
     if (less than 3 are different, and the middle is different) 
     { 
      is a boundry 
     } 
    } 

    for each 3 squares, above, below 
    { 
     for each 3 squares, left, right 
     { 
      if(all 3 from outer loop and all 3 from inner loop are different) 
      { 
       is a boundry 
      } 
     } 
    } 

    not a boundry 
} 
else 
{ 
    not a boundry 
} 

对待边界正方形不同。

+0

感谢您的回答和+1 – apneadiving