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

# Fuzzy-Rectangle

> Verstehen Sie den Typ FuzzyRect in der FlexiLayout-Sprache: wie innere und äußere Rechtecke die Grenzen des Suchbereichs definieren, sich überschneiden und vereinigen.

**Fuzzy-Rectangle** ist eine Struktur, die eine Klasse von Rechtecken beschreibt, deren Begrenzungen innerhalb bestimmter zulässiger Bereiche liegen. Ein Fuzzy-Rectangle besteht aus zwei Rechtecken: einem externen und einem internen Rechteck.

In der FlexiLayout-Sprache werden Fuzzy-Rectangle durch den Typ `FuzzyRect` dargestellt.

<div id="internal-and-external-rectangles">
  ## Interne und externe Rechtecke
</div>

Wie die folgende Abbildung zeigt, gibt es im allgemeinen Fall, wenn für alle Begrenzungen Einschränkungen festgelegt sind, einen Teil des Suchbereichs, der bei jeder Hypothese für das Element enthalten sein muss. Dieser Teil bildet das interne Rechteck. Das größtmögliche umschreibende Rechteck der möglichen Hypothese bildet das externe Rechteck.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/Rectangle.gif?s=841f9ffc5ec0e7ce0ea2f3ada746c7c4" alt="Diagramm eines Fuzzy-Rectangle, das das interne Rechteck und das externe Rechteck zeigt, die den Suchbereich eines Elements in ABBYY FlexiLayout Studio begrenzen." width="283" height="215" data-path="images/flexi-capture/fls/Rectangle.gif" />
</Frame>

Die Begrenzungen des Elements seien:

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

Dann wird das Fuzzy-Rectangle, das die angegebenen Informationen zu den Begrenzungen enthält, wie folgt gebildet: `InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]`.

Wenn für die Begrenzungen des Suchbereichs keine Einschränkungen festgelegt sind, degeneriert das interne Rechteck und ist geometrisch nicht sinnvoll. In diesem Fall gilt `L1=R1, L2=R2, T1=B1, T2=B2`.

<div id="search-area-with-no-boundary-constraints">
  ## Suchbereich ohne Einschränkungen für die Begrenzungen
</div>

Angenommen nun, für den Suchbereich wurden keine Einschränkungen angegeben. Wenn dann die maximal und minimal zulässige Seitenanzahl 1 ist, wird das Fuzzy-Rectangle des Suchbereichs wie folgt erstellt:

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

Bei einem mehrseitigen Dokument wird das Fuzzy-Rectangle des Suchbereichs wie folgt erstellt:

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

Wie diese Ausdrücke zeigen, entspricht das äußere Rechteck dem Rechteck der gesamten Seite, und das innere Rechteck degeneriert und hat negative Höhe und Breite.

<div id="union-and-intersection-of-fuzzy-rectangles">
  ## Vereinigung und Schnittmenge von Fuzzy-Rectangle
</div>

Fuzzy-Rectangle lassen sich vereinigen und schneiden. Wenn zwei Fuzzy-Rectangle geschnitten werden, schneiden sich ihre entsprechenden Begrenzungen: Die rechte Begrenzung des einen Rechtecks schneidet sich mit der rechten Begrenzung des anderen, die linke mit der linken und so weiter.

Dadurch entstehen neue Intervalle für die Begrenzungen:

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

Das resultierende Fuzzy-Rectangle wird aus den resultierenden Intervallen gebildet: `InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]`.

Wenn infolge des Schnitts mindestens eine der Bedingungen zum Erzeugen des Fuzzy-Rectangle (`L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2`) nicht erfüllt ist, wird das resultierende Fuzzy-Rectangle auf null gesetzt: `InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]`.

In der Regel entsteht ein leeres Fuzzy-Rectangle durch widersprüchliche Bedingungen, zum Beispiel wenn Sie versuchen, zwei Fuzzy-Rectangle zu schneiden, deren externen Begrenzungen sich nicht überschneiden.

Fuzzy-Rectangle werden auf dieselbe Weise vereinigt: Zuerst werden die Intervalle jeder Begrenzung vereinigt. Durch die Vereinigung der beiden Intervalle entsteht ein minimales Intervall, das beide angegebenen Intervalle umfasst. Nachdem die Begrenzungen vereinigt wurden, wird ein neues Fuzzy-Rectangle gebildet.

In der Praxis begegnen Sie meist Fuzzy-Rectangle mit einem degenerierten internen Rechteck. Nur selten müssen Sie Einschränkungen für eine bestimmte Begrenzung festlegen. Der Suchbereich für ein Element wird jedoch immer durch ein Fuzzy-Rectangle und ein Array ausgeschlossener Rechtecke dargestellt.
