Hier ist ein Problem für Sie ;)
Ich habe ein 3-dimensionales Feld, das mit 1en und 0en gefüllt ist. Die 1en repräsentieren 3-dimensionale komplexe Polygone (keine einfachen Polygone). Nur die Ränder der Polygone haben den Wert 1, das Innere ist mit 0en gefüllt. Hier ist nun das Problem:
Ich brauche einen schnellen Algorithmus, um diese Polygone mit 1en aufzufüllen. Die Arrays haben normalerweise eine Größe von ca. 512x512x100.
Vielen Dank im Voraus!
Hier ist ein Beispiel in 2d:
0000111110000
0000100010000
0000100010000
0000111110000
sollte dazu führen, dass
0000111110000
0000111110000
0000111110000
0000111110000
Ist dies die richtige 3-dimensionale Lösung für den @Mikolas-Algorithmus?
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;
}
}
Mit freundlichen Grüßen,
stef