Zum Hauptinhalt springen
Ein Fuzzy‑Rechteck ist eine Struktur, die eine Klasse von Rechtecken beschreibt, deren Begrenzungen innerhalb bestimmter zulässiger Bereiche liegen. Ein Fuzzy‑Rechteck besteht aus zwei Rechtecken – einem äußeren und einem inneren. In der FlexiLayout-Sprache werden Fuzzy‑Rechtecke durch den Typ FuzzyRect dargestellt. Wie in der Abbildung unten zu sehen ist, gibt es im allgemeinen Fall, wenn für alle Begrenzungen Einschränkungen festgelegt sind, einen Teil des Suchbereichs, der in jede Hypothese für das Element fallen muss. Genau dieser Teil bildet das innere Rechteck. Das maximal große umschreibende Rechteck der möglichen Hypothese bildet das äußere Rechteck. Rectangle diagram showing internal and external rectangles Seien die Begrenzungen des Elements:
LeftBound: [L1, L2], wobei L1 <= L2
TopBound: [T1, T2], wobei T1 <= T2
RightBound: [R1, R2], wobei R1 <= R2
BottomBound: [B1, B2], wobei B1 <= B2
Dann wird das unscharfe Rechteck, das die Informationen über die angegebenen Grenzen enthält, wie folgt gebildet: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Wenn der Benutzer keine Einschränkungen für die Grenzen des Suchbereichs festlegt, degeneriert das innere Rechteck und ist geometrisch bedeutungslos. In diesem Fall gilt: L1=R1, L2=R2, T1=B1, T2=B2. Angenommen, es wurden keine Einschränkungen für den Suchbereich festgelegt. Dann wird, wenn die maximal und minimal zulässige Anzahl von Seiten 1 ist, das unscharfe Rechteck des Suchbereichs wie folgt erstellt:
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]
und bei einem mehrseitigen Document:
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
Wie aus den obigen Ausdrücken ersichtlich ist, deckt sich das äußere Rechteck mit dem Rechteck der gesamten Seite, während das innere Rechteck degeneriert und negative Höhe und Breite aufweist.

Operationen mit Fuzzy-Rectangles

Fuzzy-Rectangles können vereinigt und geschnitten werden. Wenn zwei Fuzzy-Rectangles geschnitten werden, schneiden sich die entsprechenden Begrenzungen: die rechte Begrenzung eines Rectangles mit der rechten des anderen, die linke mit der linken usw. Dadurch entstehen neue Bereiche für die Begrenzungen:
LeftBound: [L1', L2']
TopBound: [T1', T2']
RightBound: [R1', R2']
BottomBound: [B1', B2']
Das resultierende unscharfe Rectangle wird unter Verwendung der resultierenden Intervalle erstellt: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Wenn infolge der Schnittmenge mindestens eine der Bedingungen für die Erstellung des unscharfen Rectangle (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2) nicht erfüllt ist, wird das resultierende unscharfe Rectangle auf null gesetzt: InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. In der Regel entsteht ein leeres unscharfes Rectangle durch widersprüchliche Bedingungen, z. B. wenn Sie versuchen, zwei unscharfe Rectangles zu schneiden, deren äußere Grenzen sich nicht überschneiden. Unscharfe Rectangles werden auf die gleiche Weise vereinigt: Zuerst werden die Bereiche jeder Grenze zusammengeführt. Durch das Zusammenführen der beiden Bereiche entsteht ein minimaler Bereich, der beide angegebenen Bereiche enthält. Nachdem die Grenzen zusammengeführt wurden, wird ein neues unscharfes Rectangle gebildet. In der Praxis stoßen Sie am häufigsten auf unscharfe Rectangles mit einem degenerierten inneren Rectangle. Nur in seltenen Fällen müssen Sie Beschränkungen für eine bestimmte Grenze festlegen. Der Suchbereich für ein Element wird jedoch stets durch ein unscharfes Rectangle und ein Array von ausgeschlossenen Rectangles dargestellt.