多角形の三角形分割
ナビゲーションに移動
検索に移動
多角形の三角形分割(Polygon Triangulation)とは、1つの多角形(四角形以上)を「複数の三角形」に分割するアルゴリズムのことである。
英語圏では単に「Triangulation」と呼ばれることが多いので、詳細をググって調べたいときはこの単語をコピペしろ。
概要
コンピューターの世界で「ポリゴン(多角形)」という場合、2Dではそのまま「多角形」だが、3Dでは「複数の三角形」というのが一般的である。
たとえばSkia、CoreGraphics、WPFなどで多角形を描画する場合は深く考える必要はない。 単に頂点座標を列挙(頂点座標の配列を用意)するだけでよい。
一方で、Vulkan、Metal、Direct3Dで多角形を描画したいとなると、こいつらは基本的に「三角形の集合」しか受け付けないので事前に「複数の三角形」に分割してやる必要がある。この際に使われることが多いアルゴリズムである。他の用途はしらん。
主なアルゴリズム
- Ear Clipping
- stackoverflowでおすすめアルゴリズムを聞いたところ、Ear Clipperは理論上は最強だと思われるが、何も考えずにプログラミング言語に落とし込むと、浮動小数点の丸め誤差の蓄積などが原因で破綻し、この問題を回避するコードを入れると大して速くもないクソ実装になりがちだとされる。
- General Polygon Clipper
- stackoverflowでおすすめされたアルゴリズム。
点の三角形分割
多角形ではなく点の集合の三角形分割は以下のようなアルゴリズムがある。
- ドロネーの三角形分割(Delaunay Triangulation)
- 最小重み三角形分割(Minimum Weight Triangulation)