Vattiクリッピングアルゴリズム[1]はコンピュータグラフィックスで使用されています。任意の数の任意の形状のサブジェクトポリゴンを任意の数の任意の形状のクリップポリゴンでクリッピングできます。Sutherland -HodgmanやWeiler-Athertonポリゴンクリッピングアルゴリズムとは異なり、Vattiアルゴリズムはサブジェクトまたはクリップとして使用できるポリゴンの種類を制限しません。複雑な(自己交差する)ポリゴンや穴のあるポリゴンも処理できます。このアルゴリズムは一般に2D空間でのみ適用できます。
説明
クリッピングは、サブジェクト ポリゴンとクリップ ポリゴンの相互作用として定義されます。クリッピングでは通常、サブジェクト ポリゴンとクリップ ポリゴンの交差(重なり合う領域) を見つけますが、クリッピング アルゴリズムは他のブール クリッピング操作にも適用できます。differenceでは、クリッピング ポリゴンによってサブジェクトから重なり合う領域が削除されます。unionでは、クリッピングによってサブジェクト ポリゴンまたはクリップ ポリゴンのいずれかで覆われた領域が返されます。xorでは、クリッピングによって、サブジェクト ポリゴンとクリップ ポリゴンの両方で覆われている領域を除き、サブジェクト ポリゴンまたはクリップ ポリゴンのいずれかで覆われた領域が返されます。
Vatti アルゴリズムでは、対象ポリゴン エッジとクリッピング ポリゴン エッジの両方を、最下部のエッジから始めて上部に向かって順番に処理します。これは概念的にはBentley-Ottmann アルゴリズムに似ています。このスイープ ラインアプローチでは、問題空間をスキャンラインで分割します。スキャンラインは、関係するポリゴンのすべての頂点を通過する仮想の水平線です。これらのスキャンラインは、スキャンビーム(隣接するスキャンライン間のスペース) の輪郭を描きます。これらのスキャンビームは、最下部のスキャンビームから順に処理され、アルゴリズムによってこれらのスキャンビーム内の交点がソリューション ポリゴンに追加されます。
参照
- Martinez-Rueda_clipping_algorithm
- グライナー・ホルマンクリッピングアルゴリズム
- サザーランド・ホジマンクリッピングアルゴリズム
- ワイラー・アサートンクリッピングアルゴリズム
- ポリゴンのブール演算
参考文献
- ^ Bala R. Vatti. 「ポリゴンクリッピングの一般的なソリューション」、Communications of the ACM、Vol 35、Issue 7 (1992 年 7 月) pp. 56–63。
外部リンク
- Clipper、Vatti アルゴリズムのオープンソース フリーウェア実装
