Las estrategias de bordes son clases
que permiten flexibilizar la forma de recorrer las imágenes.
Los iteradores proveen funciones para movernos según
filas columnas y profundidad ( en 3D ), pero
por ejemplo en el caso de la figura 3.1.5.
Si incrementamos la cooredenada
x0, ¿ Hacia que punto pasamos ?
La opción más razonable si venimos haciendo
un recorrido por filas es pasar al fila de abajo. Pero también podríamos
querer saltearnos un o más filas, o comenzar nuevamente en la misma
fila o incluso ir hacia la fila de arriba. Quie toma esta decisión
es la estrategia de borde que ha sido elegida por el usuario.
La idea es que el iterador consulte a la estrategia de
borde cuando se ha llegado a un borde de la imagen y se ella la que le
indique el siguiente punto.
Para independizar el recorrido en cada una de las direcciones,
existe una estrategia de borde para cada dimensión, es decir, se
consulta una estrategia de borde horizontal cuando x0 llega al fin, una
vertical cuando x1 llega al fin y una de profundidad cuando x2 llega al
fin.
Por ejemplo, en la figura 2.1.6.
En el caso (a), estamos en el punto ( 4 , 2 , 0 ) , si incrementamos x0, el iterador llamará a la estrategia de borde para x0, quien decidirá a que punto pasar. En el caso (b) se llamará a la estrategia según x1 si se intenta incrementar esta coordenada y en el caso (c) lo mismo para x2.
La estructura de clases para las estrategias se muestra en la figura 3.1.2.1
El iterador declarará como amigas a las correspondientes
estrategias de borde para permitirles a estas que le modifiquen sus parámetros
internos que indiquen la posición. La única función
que necesitan tener las estrategias es "SetNextCoordinates" la cual una
vez llamada por el iterador , directamente modificarán la posición
del mismo.
La relación entre Iterador, estrategia e imagen
se muestra en la figura 3.1.7.
El iterador no tiene un puntero a cada estrategia sino
que estas son parte de la clase.
Es decir que por ejemplo un iterador 2D tiene como miembros
a dos estrategias, una para x0 y otra para x1.
Pueden verse con más detalle las funciones de cada una de las estrategias en la descripción de las clases.
bicotiImageBorderStrategy
bicotiImageBorderStrategy2D
bicotiImageBorderStrategy2DX0
bicotiImageBorderStrategy2DX1
bicotiImageBorderStrategy3D
bicotiImageBorderStrategy3DX0
bicotiImageBorderStrategy3DX1
bicotiImageBorderStrategy3DX2