2014-10-28 60 views
1

我正在尝试计算网格上岛的外边缘。每个网格图块都有4个顶点组成角点,我想按顺时针方向计算边缘,以便排序。查找网格岛的外边缘

我的网格是一个二维字节数组byte[,] grid,我可以很容易地找到邻居瓷砖,但是我正在努力寻找找到岛屿边缘的解决方案。

0 0 0 0 0 0 0 0 0 
1 1 1 0 0 0 1 1 0 
1 1 1 0 0 0 1 1 0 
1 1 1 1 1 0 0 0 0 
1 1 1 1 1 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 

在这张图片中,红点代表我试图找到的位中的顶点和绿线。

enter image description here

有没有人有任何的想法是如何可以做到这一点?

谢谢,C.

回答

1

基本上是这样:

1)检查每平方如果填充或不

2)如果它的填充检查邻居

3)是免费的行添加到每个相邻这个广场和你结束了一个包含完整的边界作为单独枚列表的邻居

之间名单。现在你需要用这个列表来玩多米诺骨牌,这样你可以将所有岛屿的边界作为单独的有序列表,最后一块应该完全适合第一块。那么你甚至可以在列表中做一些清理工作,将相同方向的线条相加。

+0

这绝对是一个正确的方向,我尽量收集每个“岛”的外边缘的有序列表。通过在相同方向上添加线条来清理列表的想法非常出色。 – 2014-10-29 09:03:31

1

基本上顶点是在边缘上,如果有内的x方向11y方向上的零。因此,对于顶点[a,b],您需要检查从[a-1,b-1][a+1,b+1]的每个顶点。注意顶点位于边缘的位置,如[0,b][a,maxy]