ここに問題があります;)
1 と 0 で満たされた 3 次元配列があります。1 は 3 次元の複雑な多角形 (単純な多角形ではない) を表します。ポリゴンの境界のみが値 1 を持ち、内部は 0 で埋められます。ここに問題があります:
これらのポリゴンを 1 で塗りつぶす高速アルゴリズムが必要です。配列の次元は通常、約です。512×512×100。
前もって感謝します!
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;
}
}
よろしくお願いします、
ステフ