Saltar al contenido principal
Un rectángulo difuso es una estructura que describe una clase de rectángulos cuyos límites se encuentran dentro de rangos permitidos específicos. Un rectángulo difuso consta de dos rectángulos: un rectángulo externo y un rectángulo interno. En FlexiLayout language, los rectángulos difusos se representan mediante el tipo FuzzyRect.

Rectángulos internos y externos

Como muestra la siguiente figura, en el caso general, cuando se establecen restricciones en todos los bordes, hay una parte del área de búsqueda que debe quedar dentro de cualquier hipótesis del elemento. Esta parte constituye el rectángulo interno. El rectángulo circunscrito de tamaño máximo de la hipótesis posible constituye el rectángulo externo.
Diagrama de un rectángulo difuso que muestra el rectángulo interno y el rectángulo externo que delimitan el área de búsqueda de un elemento en ABBYY FlexiLayout Studio.
Sean los bordes del elemento:
LeftBound: [L1, L2], where L1 <= L2
TopBound: [T1, T2], where T1 <= T2
RightBound: [R1, R2], where R1 <= R2
BottomBound: [B1, B2], where B1 <= B2
Entonces, el rectángulo difuso que contiene la información especificada sobre los límites se forma de la siguiente manera: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Si no se establecen restricciones para los límites del área de búsqueda, el rectángulo interno degenera y deja de tener sentido geométrico. En este caso, L1=R1, L2=R2, T1=B1, T2=B2.

Área de búsqueda sin restricciones en los límites

Supongamos que no se han especificado restricciones para el área de búsqueda. Entonces, si el número máximo y mínimo permitido de páginas es 1, el rectángulo difuso del área de búsqueda se crea de la siguiente manera:
LeftBound: [PageRect.Left, PageRect.Right]
TopBound: [PageRect.Top, PageRect.Bottom]
RightBound: [PageRect.Left, PageRect.Right]
BottomBound: [PageRect.Top, PageRect.Bottom]
InternalRect: [PageRect.Right, PageRect.Bottom, PageRect.Left, PageRect.Top]
ExternalRect: [PageRect.Left, PageRect.Top, PageRect.Right, PageRect.Bottom]
Para un documento de varias páginas, el rectángulo difuso del área de búsqueda se crea de la siguiente manera:
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
Como muestran estas expresiones, el rectángulo externo coincide con el rectángulo de toda la página, y el rectángulo interno degenera y tiene altura y ancho negativos.

Unión e intersección de rectángulos difusos

Los rectángulos difusos pueden unirse e intersectarse. Cuando se intersectan dos rectángulos difusos, también se intersectan sus bordes correspondientes: el borde derecho de un rectángulo con el borde derecho del otro, el izquierdo con el izquierdo, y así sucesivamente. Esto crea nuevos intervalos para los bordes: LeftBound: [L1’, L2’] TopBound: [T1’, T2’] RightBound: [R1’, R2’] BottomBound: [B1’, B2’] El rectángulo difuso resultante se crea a partir de los intervalos obtenidos: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Si, como resultado de la intersección, no se cumple al menos una de las condiciones para crear el rectángulo difuso (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2), el rectángulo difuso resultante se anula: InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. Normalmente, un rectángulo difuso vacío se crea como resultado de condiciones contradictorias; por ejemplo, si se intenta intersectar dos rectángulos difusos cuyos bordes externos no se intersectan. Los rectángulos difusos se unen de la misma manera: primero se unen los intervalos de cada borde. Como resultado de unir ambos intervalos, se crea el intervalo mínimo que contiene los dos intervalos especificados. Después de unir los bordes, se forma un nuevo rectángulo difuso. En la práctica, lo más habitual es encontrar rectángulos difusos con un rectángulo interno degenerado. Solo en casos poco frecuentes es necesario establecer restricciones sobre un borde concreto. Sin embargo, el área de búsqueda de un elemento siempre se representa mediante un rectángulo difuso y un array de rectángulos excluidos.