Delaunay三角形分割

はじめに

今回は、Delaunay三角形分割とその双対構造であるVoronoi図について説明する。

Delaunay三角形分割とは

いま3次元空間内で定義される関数z=f(x,y)を考える。関数の形状は未知であり、観測点X_i=(x_i,y_i),i=1,\cdots,Nにおける値のみが既知であるとする(下図参照:ここから引用した)。

3つの観測点X_i,X_j,X_kの近傍にある未観測点X_*におけるf(X_*)の値を予測したいとき、以下の手順を考えることができる。

  1. X_*を囲む、3つの観測点から構成される三角形を見つける。
  2. この三角形の頂点における関数の値は既知である。適当な加重平均を計算し、f(X_*)を求める。

上の手順を実現するには、2次元平面を観測点X_i,i=1,\cdots,Nを頂点とする三角形に分割しなければならない(下図参照:ここから引用した)。

このときよく使われる手法がDelaunayの三角形分割である。この分割手法は有限要素法を行う際のメッシュ生成にも使われている。

Delaunay三角形分割の定義

平面上の点の集合(母点集合)をS=\{X_1,\cdots,X_N\}とする。Sから3つの母点X_i,X_j,X_kを取り出し、これら3点のみを円周上に持ち、この3点以外の母点を円内に持たないような円が存在するとき、この3点を頂点とする三角形を作る。これを繰り返したのものがDelaunay三角形分割である(下図参照)。

この分割により、2次元平面は「ふっくら」とした三角形に分割される。

双対構造:Voronoi図

Delaunay三角形分割が実現できれば、これと双対な構造であるVoronoi図を容易に作ることができる(下図参照:ここから引用した)。

上図の赤点(母点)を結ぶ構造がDelaunay三角形分割であり、母点を細胞核のように内部にもつ領域の集まりがVoronoi図である。Voronoi図の生成手順は以下の通りである。

  1. 三角形Aの外接円C_Aの中心を求める。
  2. 三角形A,Bが隣接するときC_A,C_Bの中心を結ぶ。
  3. これを繰り返す。

例えば母点X_iを内部に持つVoronoi領域V_iを考える。この領域内の任意の点xと全母点との距離を考えたとき、xに最も近い母点はX_iである。つまり、母点X_iが「支配」する領域がV_iである。ひとつの適用例としてWorld Airports Voronoiなるものがある。これは世界中の空港の位置を母点としたVoronoi図である。

実装

Delaunay三角形分割とVoronoi図はともにOpenCVに実装されているので、これを利用する。サンプルコードは以下の通りである。

これを実行すると以下の画像を得る。母点の数は1000である。最初の画像がDelaunay三角形分割、後の画像が同じ母点に対するVoronoi図である。

まとめ

今回は、Delaunay三角形分割とVoronoi図を紹介した。両者とも応用例の大変多い構造である。

参考文献

  • 計算幾何プログラミング:アルゴリズムをプログラムに置き換えるとき、数式には出てこないさまざな例外を考える必要がある。その例外を回避する手法を詳細に論じた良書である。
  • コンピュータ・ジオメトリ:広く読まれているこの分野の教科書。
  • Kumada Seiya

    Kumada Seiya

    仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

    最近の記事

    • 関連記事
    • おすすめ記事
    • 特集記事

    アーカイブ

    カテゴリー

    PAGE TOP