Passer au contenu principal
Le rectangle flou est une structure qui décrit une classe de rectangles dont les limites se situent dans des plages autorisées spécifiques. Un rectangle flou se compose de deux rectangles : un rectangle externe et un rectangle interne. Dans le langage FlexiLayout, les rectangles flous sont représentés par le type FuzzyRect. Comme on peut le voir dans la figure ci-dessous, dans le cas général, lorsque des contraintes sont définies pour toutes les limites, une partie de la zone de recherche doit impérativement se trouver dans toute hypothèse concernant l’élément. C’est cette partie qui forme le rectangle interne. Le rectangle circonscrit de taille maximale pour l’hypothèse possible constitue le rectangle externe. Rectangle diagram showing internal and external rectangles Soient les limites de l’élément :
LeftBound : [L1, L2], où L1 <= L2
TopBound : [T1, T2], où T1 <= T2
RightBound : [R1, R2], où R1 <= R2
BottomBound : [B1, B2], où B1 <= B2
Ensuite, le rectangle flou contenant les informations sur les limites spécifiées sera constitué comme suit : InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Si l’utilisateur ne définit aucune contrainte pour les limites de la zone de recherche, le rectangle interne dégénère et n’a plus de sens géométrique. Dans ce cas, L1=R1, L2=R2, T1=B1, T2=B2. Supposons maintenant qu’aucune contrainte n’ait été spécifiée pour la zone de recherche. Alors, si le nombre maximal et minimal de Page autorisées est de 1, le rectangle flou de la zone de recherche sera créé comme suit :
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]
et dans le cas d'un Document de plusieurs pages :
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
Comme on peut le voir d’après les expressions ci-dessus, le Rectangle externe coïncide avec le rectangle de l’ensemble de la Page, et le Rectangle interne dégénère et a une hauteur et une largeur négatives.

Opérations sur les rectangles flous

Les rectangles flous peuvent être réunis et intersectés. Lorsque deux rectangles flous sont intersectés, leurs limites correspondantes s’intersectent : la limite droite de l’un des Rectangle s’intersecte avec la limite droite de l’autre, la gauche avec la gauche, etc. Cela crée de nouvelles plages pour les limites :
LeftBound: [L1', L2']
TopBound: [T1', T2']
RightBound: [R1', R2']
BottomBound: [B1', B2']
Le Rectangle flou résultant sera créé à partir des intervalles obtenus : InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Si, à la suite de l’intersection, au moins une des conditions de création du Rectangle flou (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2) n’est pas remplie, le Rectangle flou résultant sera annulé : InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. En général, un Rectangle flou vide résulte de conditions contradictoires, par exemple si vous tentez d’intersecter deux Rectangles flous dont les limites externes ne se recoupent pas. Les Rectangles flous sont unis de la même manière : d’abord, les plages de chaque limite sont fusionnées. L’union des deux plages produit une plage minimale qui contient les deux plages indiquées. Une fois les limites fusionnées, un nouveau Rectangle flou est formé. En pratique, vous rencontrerez le plus souvent des Rectangles flous avec un rectangle interne dégénéré. Il est rare d’avoir besoin de définir des contraintes sur une limite spécifique. Cependant, la zone de recherche d’un élément est toujours représentée par un Rectangle flou et un tableau de rectangles exclus.