【发布时间】:2011-09-30 18:20:29
【问题描述】:
这是给你的一个问题;)
我有一个用 1 和 0 填充的 3 维数组。 1 代表 3 维复杂多边形(不是简单多边形)。只有多边形的边界值为 1,内部填充为 0。现在问题来了:
我需要一个快速算法来用 1 填充这些多边形。数组的维度通常约为。 512x512x100。
提前致谢!
这是 2d 中的示例:
0000111110000
0000100010000
0000100010000
0000111110000
应该会导致
0000111110000
0000111110000
0000111110000
0000111110000
这是@Mikolas 算法的正确 3 维解决方案吗?
void scan_polygon(int frames, int rows, int cols, char data[][][], char result[][][]){
for(int f=0; f < frames; ++f)
for(int r=0; r<rows; ++r)
for(int s = 0, c=0; c<cols-1; ++c)
{
s ^= s ? ( data[f][r][c] && !data[f][r][c+1]) :
(!data[f][r][c] && data[f][r][c-1]);
result[f][r][c] = s;
}
for(int f=0; f < frames; ++f)
for(int c=0; c<cols; ++c)
for(int s = 0, r=0; r<rows-1; ++r)
{
s ^= s ? ( data[f][r][c] && !data[f][r+1][c]) :
(!data[f][r][c] && data[f][r-1][c]);
result[f][r][c] &= s;
}
}
最好的问候,
斯特夫
【问题讨论】:
-
当您说“flood-fill”时,您的意思是要将整个数组初始化为值
1吗?或者您只是想要一种快速的方法将边界点设置为1,并将数组的其余部分设置为0? -
每个数组代表一个多边形吗?
-
我同意@6502; 3 空间中的复杂多边形甚至没有 明确定义的“内部!”如果您发布一个小数组的示例和所需的输出,我们将有更好的机会帮助您。 -1 直到那时。
-
我认为他的意思是多面体,而不是多边形。 IIUC FACES 的内部都是 1,但多面体是“空的”
-
哇,你们真快。到目前为止谢谢!
标签: c++ math polygon computational-geometry flood-fill