Skip to main content
Un rectangle flou est une structure qui décrit une classe de rectangles dont les limites se trouvent dans des plages autorisées données. 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.

Rectangles internes et externes

Comme l’illustre la figure suivante, dans le cas général, lorsque des contraintes sont définies pour toutes les limites, une partie de la zone de recherche doit être incluse dans toute hypothèse relative à l’élément. Cette partie forme le rectangle interne. Le plus grand rectangle circonscrit de l’ensemble des hypothèses possibles forme le rectangle externe.
Schéma d'un rectangle flou montrant le rectangle interne et le rectangle externe qui délimitent la zone de recherche d'un élément dans ABBYY FlexiLayout Studio.
Soient les limites de l’élément :
Le rectangle flou contenant les informations de limites spécifiées est alors formé comme suit : InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Si aucune contrainte n’est définie pour les limites de la zone de recherche, le rectangle interne dégénère et perd tout sens géométrique. Dans ce cas, L1=R1, L2=R2, T1=B1, T2=B2.

Zone de recherche sans contraintes sur les limites

Supposons qu’aucune contrainte n’ait été spécifiée pour la zone de recherche. Alors, si le nombre minimal et maximal de pages autorisé est de 1, le rectangle flou de la zone de recherche est créé comme suit :
Pour un document multipage, le rectangle flou de la zone de recherche sera créé comme suit :
Comme le montrent ces expressions, le rectangle externe coïncide avec le rectangle de la page entière, et le rectangle interne dégénère et présente une hauteur et une largeur négatives.

Union et intersection des rectangles flous

Les rectangles flous peuvent être réunis ou intersectés. Lorsque deux rectangles flous sont intersectés, leurs limites correspondantes s’intersectent : la limite droite de l’un s’intersecte avec la limite droite de l’autre, la limite gauche avec la limite gauche, et ainsi de suite. Cela crée de nouvelles plages pour les limites :
Le rectangle flou résultant est 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 est annulé : InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. En général, un rectangle flou vide est créé à la suite de conditions contradictoires, par exemple si vous essayez d’intersecter deux rectangles flous dont les limites externes ne s’intersectent pas. Les rectangles flous sont réunis de la même manière : d’abord, les plages de chaque limite sont réunies. L’union des deux plages produit une plage minimale qui contient les deux plages spécifiées. Une fois les limites réunies, 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 que vous ayez 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.