我想创建表示由轮廓(边缘列表)给出的几何形状的2D数组。 形状总是可以分成矩形基元并放置在网格上(就像在带有方形纸的笔记本中)。我的目标是创建表示网格的2D bool数组,以及哪些字段为:true - 如果网格单元格位于轮廓内(是形状的一部分),否则为false。有谁知道如何实现这一目标?我在这上花了几个小时但仍然没有。
答案 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。在左右移动时,在水平中检查垂直列表中的边框。上下移动时的列表(使用二分查找)。