SlideShare a Scribd company logo
1 of 32
Download to read offline
ドロネー三角形分割
shiatsumat
松下祐介
自己紹介
• Haskell共和国の住人
• 競技プログラミングエンジョイ勢
本の紹介
• 『コンピュータ・ジオメトリ』
• 計算機科学の一分野の計算幾何学の本
• 著者4人のうち3人がMark
今日の予定
• ドロネー三角形分割についてゆるふわに
話します
三角形分割
• 平面上の点の集合Pについて、いくつかの
点の対も辺で結ばれていて、どの辺も交
差していなくて、どの辺で結ばれていな
い2点を辺で結んでも、辺が交差してしま
うような、平面の分割(辺の取り方)を
三角形分割という。
• これが三角形分割です→実演
三角形分割
• どの面も三角形である。
(∵多角形は三角形に分割できる)
• 外側はPの凸包である。
• Pがn点を含み、Pの凸包の境界上にk点が
あるとき、Pのどの三角形分割も、2n-2-k
個の三角形を含み、3n-3-k個の辺を含む。
ドロネー三角形分割
• Pの三角形分割Tにm個の三角形が含まれ
ているとし、Tのそれぞれの三角形の内角
3m個を昇順にソートした列をTの角度ベ
クトルという。
• Pの三角形分割のうち、角度ベクトルが辞
書順で最大であるものをPのドロネー三角
形分割という。
• これがドロネー三角形分割です→実演
ドロネー三角形分割
• TをPの三角形分割とする。TがPのドロ
ネー三角形分割であるための必要十分条
件は、Tの任意の三角形の外接円がその内
部にPの点を含まないことである。
不正な辺
アルゴリズムの概要
• 乱択逐次構成法
• 点をシャッフルし、1つずつ点を増やして
いってそのたびにドロネー三角形分割を
する
• 割と簡単
アルゴリズム
• Pをn点の集合とする
• 三角形分割をするために、最初にPの点を
全て含む大きい三角形を考える
(すごく左上にある点とすごく右上にあ
る点を追加し、Pの一番下にある点と一緒
に三角形を作る)
• 三角形分割Tを大きい三角形として初期化
する。
アルゴリズム
• Pの一番下にある点以外の点をシャッフル
し、列P’を求める。
• P’の点Xを順に追加していく。
• Xを含む三角形分割Tの三角形を△ABCと
する。Tにおいて△ABCを△XBC・
△XCA・△XABに分割する。
• ここで不正な辺が出来ていないか確かめ
る。
アルゴリズム
• 不正な辺になる可能性があるのはBC, CA,
ABの3辺。
• ここではBCが不正であるかを確かめてい
く。他も同様にできる。
アルゴリズム
• △XBCと辺BCで接する三角形を△YCBと
する。
• Yが△XBCの外接円の内部にあれば、BC
は不正。
X
C
B
Y
不正な辺
アルゴリズム
• 不正な辺があった際は、図のように
フリップする。
X
C
B
Y
X
C
B
Y
アルゴリズム
• フリップしたらまた不正な辺ができるか
もしれない。
• YBとYCが不正であるかどうか確かめる。
以下同様に続いていく。
X
C
B
Y
アルゴリズム
• 最終的に全部の点を追加したら、三角形
分割Tから、最初に追加したすごく左上の
点とすごく右上の点に接続している辺を
すべて取り除く。
• これでドロネー三角形分割は完了。
• うれしい。
アルゴリズム
• 「Xを含む三角形分割Tの三角形を△ABC
とする。」ここの計算量はどうだろう
か?
• ナイーブに個々の三角形について点が含
まれているか確かめることもできるが、
O(n)となる
• 三角形分割と同時に木構造を作って再帰
的に求めていくことができる
アルゴリズム
• この乱択逐次構成法の計算量の期待値は
O(n log n)
• うれしい。
ドロネー三角形分割の実用例
• 各地点の高さが分かっているとき、地形の
状況をドロネー三角形分割に基づき表す
ボロノイ図
• 点の集合Pがあり、平面上のすべての座標
について、一番近いPの要素の点を表す図。
ボロノイ図
• 藤原さんが夏季セミナー中に実装しました
ボロノイ図⇔ドロネー三角形分割
• ボロノイ図で領域が接している⇔
ドロネー三角形分割で辺で結ばれている
ボロノイ図の実用例
• 主要都市を元に地域を分割する
ドロネー三角形分割→EMST
• ユークリッド最小木(EMST): 平面上の全
ての点を連結する木の中で辺の長さの総
和が最小なもの
• ドロネー三角形分割をグラフとして見る。
点の数をnとするとドロネー三角形分割の
辺の数は3n-3-kなので、O(n log n)で最
小全域木が求まる。ドロネー三角形分割
と合わせてもO(n log n)となる。
行商人問題 (TSP)
• 言わずと知れたNP困難問題
• n点の間にいくつか距離のある辺があって、
n点全てを1回だけ通る経路のうち総移動
距離が最小のものを求めよ、という問題
• ここではn点は平面上にあり、どの2点間
にも辺があり幾何的な距離を持っている
ものとする
EMST→2近似TSP
• EMSTからTSPの2近似アルゴリズム(総
移動距離が最小の場合の2倍以下)を作る
ことができる
• まずEMSTをなめる閉路をつくる
EMST→2近似TSP
• 閉路をショートカットしていく。
EMST→2近似TSP
• 2回通っている点についてO(1)でショート
カットできるので、O(n)で巡回路になる。
EMSTまでと合わせてO(n log n)となる。
EMST→2近似TSP
• 行商人問題の最適解での総移動距離をtsp、
最小全域木の辺の長さの合計をemst、
ここで求めた巡回路の総移動距離をdとす
る。
tsp≧tspから1本辺を取ったもの≧emst
d≦2emst
∴d≦2tsp
• 以上よりこれは2近似アルゴリズムである。
おまけ
• 暇だったので3Dの凸包を作ってみました
→実演
• このアルゴリズムも乱択逐次構成法
• うれしい
まとめ
• ドロネー三角形分割はうれしい!
ありがとうございました

More Related Content

What's hot

【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作るtorisoup
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoderSho Tatsuno
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量takaya imai
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Naoaki Okazaki
 
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―Yosuke Shinya
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類Yoshitaka HARA
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日Kitsukawa Yuki
 
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成MobileRoboticsResear
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAGIRobots
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 

What's hot (20)

【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
 
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―
Active Convolution, Deformable Convolution ―形状・スケールを学習可能なConvolution―
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
Point net
Point netPoint net
Point net
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
SLAM勉強会(PTAM)
SLAM勉強会(PTAM)SLAM勉強会(PTAM)
SLAM勉強会(PTAM)
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 

Viewers also liked

3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求めるabc3141
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-pCHY72
 
Maxcut - Mesa de Corte
Maxcut - Mesa de CorteMaxcut - Mesa de Corte
Maxcut - Mesa de CorteEmaser
 
DuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax
 
Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)jeromof
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingMasaki Hara
 
Phys.org mobile social ...revive extinct language
Phys.org mobile  social ...revive extinct languagePhys.org mobile  social ...revive extinct language
Phys.org mobile social ...revive extinct languageLisa Schmidt
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIAtsushi Tadokoro
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜Yuya Unno
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Yamato Honda
 
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvMedia Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvAtsushi Tadokoro
 
エクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてエクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてHiroshi Shimizu
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 

Viewers also liked (20)

3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求める
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-p
 
分割木
分割木分割木
分割木
 
Pleasant Valley Factory Tour
Pleasant Valley Factory TourPleasant Valley Factory Tour
Pleasant Valley Factory Tour
 
Maxcut - Mesa de Corte
Maxcut - Mesa de CorteMaxcut - Mesa de Corte
Maxcut - Mesa de Corte
 
Cammelli AlmaLaurea25agosto2014
Cammelli AlmaLaurea25agosto2014Cammelli AlmaLaurea25agosto2014
Cammelli AlmaLaurea25agosto2014
 
DuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners ManualDuroMax XP10000E Generator Owners Manual
DuroMax XP10000E Generator Owners Manual
 
Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)Salida Hermandad del Rocío (Lucena del Puerto)
Salida Hermandad del Rocío (Lucena del Puerto)
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcasting
 
abc031
abc031abc031
abc031
 
Phys.org mobile social ...revive extinct language
Phys.org mobile  social ...revive extinct languagePhys.org mobile  social ...revive extinct language
Phys.org mobile social ...revive extinct language
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜
 
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
 
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCvMedia Art II 2013  第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
 
エクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについてエクセルで統計分析 統計プログラムHADについて
エクセルで統計分析 統計プログラムHADについて
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 

More from Yusuke Matsushita

NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数Yusuke Matsushita
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめYusuke Matsushita
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへYusuke Matsushita
 
Modeling Concurrent Computing
Modeling Concurrent ComputingModeling Concurrent Computing
Modeling Concurrent ComputingYusuke Matsushita
 
Programmers, be a Wikipedian
Programmers, be a WikipedianProgrammers, be a Wikipedian
Programmers, be a WikipedianYusuke Matsushita
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイムYusuke Matsushita
 

More from Yusuke Matsushita (11)

NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数NPC April Fool's Contest 2014 累乗数
NPC April Fool's Contest 2014 累乗数
 
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
 
Haskell Lecture 1
Haskell Lecture 1Haskell Lecture 1
Haskell Lecture 1
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめ
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ
 
C#への招待
C#への招待C#への招待
C#への招待
 
Modeling Concurrent Computing
Modeling Concurrent ComputingModeling Concurrent Computing
Modeling Concurrent Computing
 
Programmers, be a Wikipedian
Programmers, be a WikipedianProgrammers, be a Wikipedian
Programmers, be a Wikipedian
 
OpenMPI入門
OpenMPI入門OpenMPI入門
OpenMPI入門
 
確率解析計算
確率解析計算確率解析計算
確率解析計算
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイム
 

ドロネー三角形分割