Comprenda el tipo FuzzyRect en FlexiLayout language: cómo los rectángulos interno y externo definen los límites del área de búsqueda, se intersectan y se unen.
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.Como puede verse en la figura siguiente, en el caso general, cuando se establecen restricciones para todos los límites, hay una parte del área de búsqueda que debe quedar dentro de cualquier hipótesis del elemento. Esa parte es la que forma el rectángulo interno. El rectángulo circunscrito de tamaño máximo de la hipótesis posible forma el rectángulo externo.
Muéstrame...
Supongamos que los límites del elemento son:LeftBound: [L1, L2], donde L1 <= L2
TopBound: [T1, T2], donde T1 <= T2
RightBound: [R1, R2], donde R1 <= R2
BottomBound: [B1, B2], donde B1 <= B2Entonces, el rectángulo 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 degenera y deja de tener 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 rectángulo 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 documento 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 puede verse en las expresiones anteriores, 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.Los rectángulos difusos pueden unirse e intersectarse. Cuando se intersectan dos rectángulos difusos, sus límites correspondientes se intersectan: el límite derecho de un rectángulo 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á a partir de los intervalos resultantes: 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 anulará: 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 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 unen los rangos de cada límite. Como resultado de unir los dos rangos, se crea un rango mínimo que contiene ambos rangos especificados. Después de unir los límites, se forma un nuevo rectángulo difuso.En la práctica, lo más frecuente es encontrar rectángulos difusos con un rectángulo interno degenerado. Solo en raras 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 un array de rectángulos excluidos.