====== Entscheidungsmatrizen ======
Folgender Code fragt Dinge wiederholt ab:
Surroundings( Image & img, size_t x, size_t y )
{
#define look( cond, x, y ) ( cond ) ? img.getIntensity( (x), (y) ) != 0 : 0;
if ( x < img.width() && y < img.height )
{
In = img.getIntensity( x, y );
if ( x > 0 )
{
TopLeft = look( y > 0, x - 1, y-1 );
Left = img.getIntensity( x - 1, y ) != 0;
BottomLeft = look( y + 1 < img.height(), x - 1, y + 1 );
}
if ( x+1 < img.width() )
{
TopRight = look( y > 0, x + 1, y - 1 );
Right = img.getIntensity( x +1, y ) != 0;
BottomRight = look( y + 1 < img.height(), x + 1, y + 1 );
}
Top = look( y > 0, x, y - 1 );
Bottom = look( y + 1 < img.height(), x, y + 1 );
}
}
Möglicherweise lässt sich sowas im 2D-Fall auch als Tabelle abbilden:
matrix
{
setBottomRight := BottomRight = look( y + 1 < img.height(), x + 1, y + 1 );
setBottom := Bottom = look( y + 1 < img.height(), x, y + 1 );
x > 0, x < width(), x + 1 < width()
y > 0
y < height Left = img.GetIntensity() in = getIntensity()
y + 1 < height setBottomRight() setBottom()
}
Hier könnte man dann überlegen, ob das auch Tabelle optisch hinterlegt werden kann (| wie im Wiki).
Wie sieht das ganze bei drei abhängigen Variablen aus?