Zum Hauptinhalt springen
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 äußeren und einem inneren Rechteck. In der FlexiLayout-Sprache werden Fuzzy-Rectangle 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 jeder Hypothese für das Element enthalten sein muss. Dieser Teil bildet das innere Rechteck. Das größtmögliche umschreibende Rechteck der möglichen Hypothese bildet das äußere Rechteck.
Die Begrenzungen des Elements seien: 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 Fuzzy-Rectangle, das die Informationen über die angegebenen Begrenzungen enthält, wie folgt gebildet: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Wenn der Benutzer keine Einschränkungen für die Begrenzungen des Suchbereichs festlegt, degeneriert das innere Rechteck und hat geometrisch keine Bedeutung. In diesem Fall gilt L1=R1, L2=R2, T1=B1, T2=B2. 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: 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 im Fall eines mehrseitigen Dokuments: 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, entspricht das äußere Rechteck dem Rechteck der gesamten Seite, und das innere Rechteck degeneriert und hat negative Höhe und Breite. Fuzzy-Rectangle können vereinigt und geschnitten werden. 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 usw. Dadurch entstehen neue Bereiche für die Begrenzungen: LeftBound: [L1’, L2’] TopBound: [T1’, T2’] RightBound: [R1’, R2’] BottomBound: [B1’, B2’] Das resultierende Fuzzy-Rectangle wird anhand der resultierenden Intervalle erstellt: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Wenn infolge des Schnitts mindestens eine der Bedingungen für das Erstellen des Fuzzy-Rectangles (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 infolge widersprüchlicher Bedingungen, z. B. wenn Sie versuchen, zwei Fuzzy-Rectangle zu schneiden, deren äußere Begrenzungen sich nicht überschneiden. Fuzzy-Rectangle werden auf dieselbe Weise vereinigt: Zuerst werden die Bereiche jeder Begrenzung vereinigt. Durch die Vereinigung der beiden Bereiche entsteht ein minimaler Bereich, der beide angegebenen Bereiche enthält. Nachdem die Begrenzungen vereinigt wurden, wird ein neues Fuzzy-Rectangle gebildet. In der Praxis werden Sie meist auf Fuzzy-Rectangle mit einem degenerierten inneren Rechteck stoßen. 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.