Vai al contenuto principale
Il rettangolo fuzzy è una struttura che descrive una classe di rettangoli i cui confini rientrano in specifici intervalli consentiti. Un rettangolo fuzzy è composto da due rettangoli: uno esterno e uno interno. Nel linguaggio FlexiLayout, i rettangoli fuzzy sono rappresentati dal tipo FuzzyRect. Come si può vedere nella figura seguente, nel caso generale, quando sono impostati vincoli per tutti i confini, esiste una parte dell’area di ricerca che deve rientrare in qualunque ipotesi per l’elemento. È questa parte a formare il rettangolo interno. Il rettangolo circoscritto di dimensioni massime dell’insieme delle ipotesi possibili costituisce il rettangolo esterno. Rectangle diagram showing internal and external rectangles Siano i confini dell’elemento:
LeftBound: [L1, L2], dove L1 <= L2
TopBound: [T1, T2], dove T1 <= T2
RightBound: [R1, R2], dove R1 <= R2
BottomBound: [B1, B2], dove B1 <= B2
Quindi il rettangolo fuzzy contenente le informazioni sui limiti specificati sarà definito come segue: InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]. Se l’utente non imposta alcun vincolo per i limiti dell’area di ricerca, il rettangolo interno degenera e perde significato geometrico. In questo caso L1=R1, L2=R2, T1=B1, T2=B2. Supponiamo ora che non siano stati specificati vincoli per l’area di ricerca. Quindi, se il numero massimo e minimo consentito di Pagina è 1, il rettangolo fuzzy dell’area di ricerca verrà creato come segue:
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]
e nel caso di un Document multipagina:
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
Come si evince dalle espressioni sopra, il Rectangle esterno coincide con il Rectangle dell’intera Pagina, mentre il Rectangle interno degenera e presenta altezza e larghezza negative.

Operazioni sui Fuzzy Rectangles

I Fuzzy Rectangles possono essere uniti e intersecati. Quando due Fuzzy Rectangles vengono intersecati, i rispettivi bordi si intersecano: il bordo destro di un Rectangle si interseca con il bordo destro dell’altro, il sinistro con il sinistro, ecc. Questo genera nuovi intervalli per i bordi:
LeftBound: [L1', L2']
TopBound: [T1', T2']
RightBound: [R1', R2']
BottomBound: [B1', B2']
Il Rectangle fuzzy risultante verrà creato utilizzando gli intervalli ottenuti: InternalRect: [L2’, T2’, R1’, B1’], ExternalRect: [L1’, T1’, R2’, B2’]. Se, in seguito all’intersezione, almeno una delle condizioni per la creazione del Rectangle fuzzy (L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2) non è soddisfatta, il Rectangle fuzzy risultante verrà azzerato: InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]. Di solito un Rectangle fuzzy vuoto è il risultato di condizioni contraddittorie, ad es. quando si tenta di intersecare due Rectangle fuzzy i cui limiti esterni non si intersecano. I Rectangle fuzzy vengono uniti nello stesso modo: per prima cosa si uniscono gli intervalli di ciascun bordo. Dall’unione dei due intervalli nasce un intervallo minimo che contiene entrambi quelli specificati. Dopo aver unito i bordi, viene creato un nuovo Rectangle fuzzy. Nella pratica incontrerai più spesso Rectangle fuzzy con un rettangolo interno degenere. Solo in rari casi sarà necessario impostare vincoli su un bordo specifico. Tuttavia, l’area di ricerca di un elemento è sempre rappresentata da un Rectangle fuzzy e da un array di Rectangle esclusi.