0

我有一个由二维浮点数组表示的高程图。来自边界的区域集合

有此地图,其边缘我已经包含在其中包含的边缘的小区的列表的单个载体(由它们的xy坐标值确定)的区域。

边缘单元不知道它们与哪个区域相关联,也没有在矢量内连续的边缘单元必须在地图中彼此相邻。

我希望能够根据这些信息(整个地图的边缘单元列表,它们可能不会相邻)唯一地标识每个区域。

我曾想过尝试从一个边缘单元开始并遍历边缘,但是封闭空间可能包含应该排除的区域(本身包含湖泊的岛屿周围的湖泊)。我曾考虑过使用某种桶填充,但这会破坏宝贵的高程数据,我不想创建第二个数组来存储信息。

任何思考一个有效的方式来解决它?

回答

0

Richard,

这是一个经典的连接组件标签问题,不是吗?

当您允许存储“状态”映射时,确实存在几种解决方案,即可以为像素指定离散值的辅助映像。在这些方法中,您确实可以绘制边缘像素,然后填充封闭区域。在这种情况下,每像素一位就足够了。

如果你不想为这个位提供额外的存储空间,你可能可以从浮点数值中“偷走”它。例如,如果所有标高都是正值,则可以为此目的而盗用标志位(并在之后重置);通过在浮点上映射一个位域在C中轻松完成。

+0

我原本不愿意使用额外的内存来解决问题,但似乎这将是解决问题的最优雅和最快捷的方式(使用位域),所以我会使用它。 – Richard 2012-02-23 06:40:34

+0

是的,可能更安全的切换符号位与位运算符比否定浮点值,因为-0仍然是0. – 2012-02-23 08:23:55

+0

哦,我的意思是我会使用2d布尔数组。但你提出了一个很好的观点,我可能会忽略这一点! – Richard 2012-02-25 22:25:23