-
TINに含まれるすべての頂点$v$について :
- 一時的に頂点
$v$ を削除. - 削除した頂点を除いて,Delaunay三角網を構築.
- 新たなTINを用いて,頂点
$v$ の標高誤差$error(v)$ を計算.
ソートされた各頂点
$v$ の誤差$error(v)$ を 平衡二分木(balanced binary tree)$T$ に格納する.$T$ の各ノードは誤差$error(v)$ とTINの頂点$v$ へのポインタを保持している.
また頂点$v$ には,$T$ の対応するノードへのポインタを格納する. - 一時的に頂点
-
$T$ において,最小の$error(v)$ を持つノードについて検討する.もしその$error(v)$ が,設定した最大誤差よりも大きければ,ここでアルゴリズムを終了する.そうでないとき,次のステップへ進む. -
$error(v)$ を持つ$T$ のノードを削除する.そして対応する頂点$v$ をTIN構造体から削除する.
頂点$v$ の隣接する頂点を$w_1, w_2, ..., w_j$ とする.そして頂点$w_1, w_2, ..., w_j$ を用いて,再度ドローネ三角分割を行う. -
すべての頂点
$w_i \in {w_1, w_2, ..., w_j}$ について :-
$error(w_i)$ を保持しているノードを$T$ から削除. - Step1で行ったように,頂点
$w_i$ を削除した際の標高誤差$error(w_i)$ を計算. - 新たに求めた
$error(w_i)$ を$T$ に代入.
-
Step2へ続く
Marc van Kreveld,Jürg Nievergelt,Thomas Roos,Peter Widmayer (Eds.): Algorithmic Foundations of Geographic Information Systems,Springer,pp.47-50,1997.
アルゴリズムに関する情報は,Algorithm_Delaunay を参照.
ある三角形に内包されている点について、標高を線形補間で求める。
任意の点を
重心座標系を用いると任意の点
そして
面積を
となる.また
である.
ここで面積はベクトルの外積を用いて求めた.
例)
参考
これ以前の実装(変更歴等)については、別のブランチを参照.
現状だと実行速度が遅すぎるため,C言語で処理を行うことで実行時間短縮を目指す.
Step | Pythonのみ | ver1 |
---|---|---|
標高誤差計算 | 105.1s | 88s |
delaunay分割->三角網取得 | 1.7s | 1.7s |
削除点の隣接点取得 | 0.9s | 1.1s |
隣接点の誤差更新 | 405.6s | 391.7s |
delaunay網再構築 | 122.4s | 122.2s |
合計 | 636.8s | 606s |
- ver1
- 重心座標系を用いた標高予測計算をC言語で実装