这里有一个问题要你解决;)
我有一个填满了1和0的三维数组。1表示三维复杂多边形(不是简单多边形)。只有多边形的边界具有值1,内部填充为0。现在问题在于:
我需要一种快速的算法来将这些多边形进行泛洪填充。这些数组通常具有大约512x512x100的尺寸。
谢谢!
以下是2D示例:
0000111110000
0000100010000
0000100010000
0000111110000
应该得到:
0000111110000
0000111110000
0000111110000
0000111110000
这是@Mikolas算法的正确三维解决方案吗?
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;
}
最好的问候,
stef
1
吗?还是只想快速将边界点设置为1
,其余部分设置为0
? - Jason