从矩阵获取区域/区域边界
问题描述:
听起来对我来说我有一个非常基本的需求:提取组成矩阵的区域的坐标。从矩阵获取区域/区域边界
让我举个例子。这里是一些矩阵:
| 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}
你知道一些库回答这个需要还是应该我自己编码?
答
我自己编码,不确定是否有库。
我会考虑每个地区的每个点。然后(我认为)这应该工作:
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
我不确定我了解您的示例。为什么A1是一个边界,但不是B1或A2?如果边不计为边界A1不应该是边界。 –
@Ron Warholic:当一条线存在时,我只给了极端。的确,你的建议也适合。 – apneadiving