> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rectangle flou

> Comprenez le type FuzzyRect dans le langage FlexiLayout : comment les rectangles internes et externes définissent les limites de la zone de recherche, s’intersectent et s’unissent.

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`.

<div id="internal-and-external-rectangles">
  ## Rectangles internes et externes
</div>

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.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/Rectangle.gif?s=841f9ffc5ec0e7ce0ea2f3ada746c7c4" alt="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." width="283" height="215" data-path="images/flexi-capture/fls/Rectangle.gif" />
</Frame>

Soient les limites de l'élément :

```text theme={null}
LeftBound: [L1, L2], where L1 <= L2
TopBound: [T1, T2], where T1 <= T2
RightBound: [R1, R2], where R1 <= R2
BottomBound: [B1, B2], where B1 <= B2
```

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`.

<div id="search-area-with-no-boundary-constraints">
  ## Zone de recherche sans contraintes sur les limites
</div>

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 :

```text theme={null}
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]
```

Pour un document multipage, le rectangle flou de la zone de recherche sera créé comme suit :

```text theme={null}
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
```

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.

<div id="union-and-intersection-of-fuzzy-rectangles">
  ## Union et intersection des rectangles flous
</div>

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 :

```text theme={null}
LeftBound: [L1’, L2’]
TopBound: [T1’, T2’]
RightBound: [R1’, R2’]
BottomBound: [B1’, B2’]
```

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.
