Заливка трехмерного многоугольника

вот вам проблема;)

У меня есть трехмерный массив, заполненный единицами и нулями. Единицы представляют собой трехмерные сложные многоугольники (не простые многоугольники). Только границы многоугольников имеют значение 1, внутренняя часть заполнена нулями. Вот проблема:

Мне нужен быстрый алгоритм для заливки этих полигонов единицами. Массивы обычно имеют размер ок. 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

5
задан Sampson 9 July 2011 в 05:35
поделиться