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: uno externo y otro interno. En el lenguaje FlexiLayout, los rectángulos difusos se representan con el tipo FuzzyRect. Como se aprecia en la figura a continuación, en el caso general, cuando se establecen restricciones para todos los límites, existe una parte del área de búsqueda que debe quedar dentro de cualquier hipótesis para el elemento. Esa parte conforma el rectángulo interno. El rectángulo circunscrito de tamaño máximo de la posible hipótesis conforma el rectángulo externo. Rectangle diagram showing internal and external rectangles Sean los límites del elemento:
LeftBound: [L1, L2], donde L1 <= L2
TopBound: [T1, T2], donde T1 <= T2
RightBound: [R1, R2], donde R1 <= R2
BottomBound: [B1, B2], donde B1 <= B2
Luego, el Rectangle difuso que contiene la información sobre los límites especificados se formará de la siguiente manera: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Si el usuario no establece restricciones para los límites del área de búsqueda, el rectángulo interno se degenera y no tiene sentido geométrico. En este caso, L1=R1, L2=R2, T1=B1, T2=B2. Supongamos ahora 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 Rectangle difuso del área de búsqueda se creará 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]
y en el caso de un Document de varias páginas:
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
Como se puede ver en las expresiones anteriores, el Rectangle externo coincide con el Rectangle de toda la Página, y el Rectangle interno se degenera y presenta altura y anchura negativas.

Operaciones con Fuzzy Rectangles

Los Fuzzy Rectangles se pueden unir e intersectar. Cuando se intersectan dos Fuzzy Rectangles, sus límites correspondientes se intersectan: el límite derecho de un Rectangle se intersecta con el límite derecho del otro, el izquierdo con el izquierdo, etc. Esto crea nuevos rangos para los límites:
LeftBound: [L1', L2']
TopBound: [T1', T2']
RightBound: [R1', R2']
BottomBound: [B1', B2']
El rectángulo difuso resultante se creará utilizando los intervalos obtenidos: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Si, como resultado de la intersección, no se cumple alguna de las condiciones para crear el rectángulo difuso (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2), el rectángulo difuso resultante se anulará: InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. Por lo general, un rectángulo difuso vacío se crea debido a condiciones contradictorias; p. ej., si intenta intersectar dos rectángulos difusos cuyos límites externos no se intersectan. Los rectángulos difusos se unen de la misma manera: primero, se fusionan los rangos de cada límite. Como resultado de unir los dos rangos, se crea un rango mínimo que contiene ambos rangos especificados. Una vez unificados los límites, se forma un nuevo rectángulo difuso. En la práctica, lo más habitual es encontrarse con rectángulos difusos con un rectángulo interno degenerado. Solo en contadas ocasiones necesitará establecer restricciones en un límite específico. Sin embargo, el área de búsqueda de un elemento siempre se representa mediante un rectángulo difuso y una matriz de rectángulos excluidos.