3 - Acceso Standard


3.1.2 - Estrategias de Borde.

    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.


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.


Figura 3.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


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.


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