将轮廓转换为2D布尔阵列的算法

时间:2014-03-18 11:50:07

标签: algorithm

我想创建表示由轮廓(边缘列表)给出的几何形状的2D数组。 形状总是可以分成矩形基元并放置在网格上(就像在带有方形纸的笔记本中)。我的目标是创建表示网格的2D bool数组,以及哪些字段为:true - 如果网格单元格位于轮廓内(是形状的一部分),否则为false。有谁知道如何实现这一目标?我在这上花了几个小时但仍然没有。

2 个答案:

答案 0 :(得分:0)

如果(行,列)处的单元格在其左边框上有边(这很容易从边列表中计算),则让左(行,列)为真。然后:

for each row
    inside = false
    for each column
        if (left(row, column) == true)
            inside = !inside
        isInside[row, column] = inside

isInside是你的bool网格。该算法完全忽略水平边缘并假设形状是闭合的(因此“内部”和“外部”具有含义)。如果形状没有关闭,那么结果就没有意义了,因为没有内部和外部。

这是最佳的(因为它与输出的大小成线性关系)。

答案 1 :(得分:0)

将边放入两个排序列表 - 垂直边,按X排序,水平边,按Y坐标排序。

查找轮廓内的任何单元格 - 例如,靠近最左边缘的底端。

然后从此单元格中启动flood fill。在左右移动时,在水平中检查垂直列表中的边框。上下移动时的列表(使用二分查找)。