Pular para o conteúdo principal
Um retângulo fuzzy é uma estrutura que descreve uma classe de retângulos cujos limites estão dentro de faixas específicas permitidas. Um retângulo fuzzy é composto por dois retângulos: um externo e um interno. Na linguagem FlexiLayout, retângulos fuzzy são representados pelo tipo FuzzyRect. Como pode ser visto na figura abaixo, no caso geral, quando as restrições para todos os limites são definidas, há uma parte da área de busca que deve estar contida em qualquer hipótese para o elemento. É essa parte que forma o retângulo interno. O retângulo circunscrito de tamanho máximo da hipótese possível forma o retângulo externo. Rectangle diagram showing internal and external rectangles Sejam os limites do elemento:
LeftBound: [L1, L2], onde L1 <= L2
TopBound: [T1, T2], onde T1 <= T2
RightBound: [R1, R2], onde R1 <= R2
BottomBound: [B1, B2], onde B1 <= B2
Então, o Rectangle difuso contendo as informações sobre os limites especificados será formado da seguinte maneira: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Se o usuário não definir restrições para os limites da área de pesquisa, o retângulo interno se degenera e deixa de ter significado geométrico. Nesse caso, L1=R1, L2=R2, T1=B1, T2=B2. Suponha agora que nenhuma restrição tenha sido especificada para a área de pesquisa. Então, se o número máximo e mínimo permitido de Página for 1, o Rectangle difuso da área de pesquisa será criado da seguinte maneira:
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]
e no caso de um Document com várias 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 pode ser visto nas expressões acima, o retângulo externo coincide com o retângulo da página inteira, e o retângulo interno degenera e apresenta altura e largura negativas.

Operações com Fuzzy Rectangles

Fuzzy Rectangles podem ser unidos e intersectados. Quando dois Fuzzy Rectangles são intersectados, seus limites correspondentes se intersectam: o limite direito de um Rectangle se intersecta com o limite direito do outro, o esquerdo com o esquerdo, etc. Isso cria novos intervalos para os limites:
LimitEsquerdo: [L1', L2']
LimiteSuperior: [T1', T2']
LimiteDireito: [R1', R2']
LimiteInferior: [B1', B2']
O Rectangle fuzzy resultante será criado usando os intervalos obtidos: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Se, como resultado da interseção, ao menos uma das condições para criar o Rectangle fuzzy (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2) não for atendida, o Rectangle fuzzy resultante será anulado: InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. Geralmente, um Rectangle fuzzy vazio é criado devido a condições contraditórias; por exemplo, se você tentar intersectar dois Rectangles fuzzy cujos limites externos não se intersectam. Rectangles fuzzy são unidos da mesma maneira: primeiro, os intervalos de cada limite são unificados. Como resultado da unificação dos dois intervalos, é criado um intervalo mínimo que contém ambos os intervalos especificados. Após os limites serem unificados, um novo Rectangle fuzzy é formado. Na prática, você encontrará com mais frequência Rectangles fuzzy com um retângulo interno degenerado. Apenas em raras ocasiões será necessário definir restrições em um limite específico. No entanto, a área de busca de um elemento é sempre representada por um Rectangle fuzzy e um array de retângulos excluídos.