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

> FlexiLayout language の FuzzyRect 型について説明します。内部矩形と外側の矩形が検索領域の境界をどのように定義し、どのように交差・結合されるかを解説します。

**ファジー矩形** は、境界がそれぞれ特定の許容範囲内にある矩形のクラスを表す構造です。ファジー矩形 は、外側の矩形と内部矩形の 2 つの矩形で構成されます。

FlexiLayout language では、ファジー矩形は `FuzzyRect` 型で表されます。

<div id="internal-and-external-rectangles">
  ## 内部矩形と外側の矩形
</div>

次の図に示すように、一般的なケースでは、すべての境界に制約が設定されている場合、検索領域には、その要素のあらゆる仮説に必ず含まれる部分があります。この部分が内部矩形を形成します。考えられる仮説を外接する最大の矩形が、外側の矩形を形成します。

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/Rectangle.gif?s=841f9ffc5ec0e7ce0ea2f3ada746c7c4" alt="内部矩形と、ABBYY FlexiLayout Studio における要素の検索領域を囲む外側の矩形を示すファジー矩形の図。" width="283" height="215" data-path="images/flexi-capture/fls/Rectangle.gif" />
</Frame>

要素の境界を次のように定義します。

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

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

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

<div id="search-area-with-no-boundary-constraints">
  ## 境界に制約のない検索領域
</div>

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

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

複数ページ文書の場合、検索領域のファジー矩形は次のように作成されます。

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

これらの式が示すように、外側の矩形はページ全体の矩形と一致し、内部矩形は退化して高さと幅が負になります。

<div id="union-and-intersection-of-fuzzy-rectangles">
  ## ファジー矩形の和集合と積集合
</div>

ファジー矩形に対しては、和集合と積集合を求めることができます。2 つのファジー矩形の積集合を取ると、対応する 境界 同士が交差します。つまり、一方の矩形の右 境界 は他方の矩形の右 境界 と、左 境界 は左 境界 と、というように交差します。

これにより、境界 の新しい範囲が作成されます:

```text theme={null}
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`) のうち 1 つでも満たされない場合、結果のファジー矩形は空になります: `InternalRect: [0, 0, 0, 0], ExternalRect: [0, 0, 0, 0]`.

通常、空のファジー矩形は矛盾する条件によって生じます。たとえば、外側の 境界 同士が交差しない 2 つのファジー矩形の積集合を取ろうとした場合です。

ファジー矩形の和集合も同じ方法で求められます。まず、各 境界 の範囲の和集合を取ります。2 つの範囲を объединить すると、指定した両方の範囲を含む最小の範囲が作成されます。境界 の和集合を取った後、新しいファジー矩形が形成されます。

実際には、内部矩形が縮退したファジー矩形を目にすることがほとんどです。特定の 境界 に制約を設定する必要があることはまれです。ただし、要素の検索領域は常にファジー矩形と、除外する矩形の配列で表されます。
