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

# ファジー矩形

> ファジー矩形と、許容範囲内の境界を持つ矩形の集合をどのように表すかを理解する

**ファジー矩形**とは、境界が特定の許容範囲内にある矩形の集合を記述する構造です。ファジー矩形は、外側の矩形と内部矩形という2つの矩形で構成されます。

FlexiLayout 言語では、ファジー矩形は **FuzzyRect** 型で表されます。

下図のとおり、一般にすべての境界に制約がある場合、要素に対するどの仮説にも必ず含まれるべき検索領域の一部が存在します。この部分が内部矩形を形成します。可能な仮説を外接する最大サイズの矩形が外側の矩形を形成します。

<img src="https://mintcdn.com/abbyy/V0q4ad-T1EezkpLf/images/vantage/advanced-designer/rectangle.svg?fit=max&auto=format&n=V0q4ad-T1EezkpLf&q=85&s=bb5080e564c12846a5605f508b3afce3" alt="内側と外側の矩形を示す Rectangle の図" style={{ width:"51%" }} width="307" height="240" data-path="images/vantage/advanced-designer/rectangle.svg" />

要素の境界を次のようにするとします：

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

次に、指定された境界に関する情報を含むファジー矩形は次のように形成されます: `InternalRect: [L2, T2, R1, B1], ExternalRect: [L1, T1, R2, B2]`。

ユーザーが検索領域の境界に制約を設定しない場合、内部矩形は退化し、幾何学的な意味を持ちません。この場合は `L1=R1, L2=R2, T1=B1, T2=B2` となります。

ここで、検索領域に制約が指定されていないと仮定します。このとき、許容されるページ数の最小値と最大値がともに 1 の場合、検索領域のファジー矩形は次のように作成されます:

```
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]
複数ページ文書の場合:
LeftBound: [-INF, INF]
TopBound: [-INF, INF]
RightBound: [-INF, INF]
BottomBound: [-INF, INF]
InternalRect: [INF, INF, -INF, -INF]
ExternalRect: [-INF, -INF, INF, INF]
```

上記の式からわかるように、外側の矩形はページ全体のRectangleと一致し、内部矩形は退化して高さ・幅が負の値をとります。

<div id="operations-on-fuzzy-rectangles">
  ## あいまいな Rectangle に対する操作
</div>

あいまいな Rectangle は、和集合や共通部分（交差）を取ることができます。2 つのあいまいな Rectangle の交差を求めると、対応する各境界同士が交差します。つまり、一方の Rectangle の右境界は他方の右境界と、左は左といった具合です。これにより、各境界に対して新たな範囲が得られます。

```
LeftBound: [L1', L2']
TopBound: [T1', T2']
RightBound: [R1', R2']
BottomBound: [B1', B2']
```

得られるファジー矩形は、算出された区間を用いて作成されます：InternalRect: \[L2', T2', R1', B1'], ExternalRect: \[L1', T1', R2', B2']。

交差の結果、ファジー矩形を作成するための条件 `(L1 <= L2, T1 <= T2, R1 <= R2, B1 <= B2)` のいずれか一つでも満たされない場合、得られるファジー矩形は無効（空）になります：InternalRect: \[0, 0, 0, 0], ExternalRect: \[0, 0, 0, 0]。通常、空のファジー矩形は矛盾する条件の結果として生成されます。例えば、外側の境界が交差しない二つのファジー矩形を交差させようとした場合などです。

ファジー矩形の和集合も同様です。まず各境界の範囲を結合します。二つの範囲を結合した結果、両方の指定範囲を包含する最小の範囲が得られます。境界を結合した後、新しいファジー矩形が形成されます。

実務では、内部矩形が退化しているファジー矩形に遭遇することが最も多いでしょう。特定の境界に制約を設定する必要があるのはまれです。ただし、要素の検索領域は常にファジー矩形と除外された矩形の配列で表されます。
