トンネルの中心線を見つけていますか?


19

トンネルを表す「ポリライン」(各ラインは頂点のリストにすぎません)で構成されるマップファイルがいくつかあります。トンネルの「センターライン」(おおまかに下の赤で表示)を見つけたいと思います。

代替テキスト

私は過去にDelaunayの三角形分割を使用してある程度成功しましたが、(一般的に)マップデータを簡単/頻繁に変更できないため、この方法は避けたいと思います。

どのようにこれを行うことができるかについてのアイデアはありますか?

私はかなり生のC ++で作業しています。


gis.stackexchange.com/q/177/162は、あなたが探しているものであるskeletisationアルゴリズムも扱っています。
ジュリアン

3
私は答えがあまりにもありますので、SOとの相互リンクが関連していると思いますstackoverflow.com/questions/3983613/find-tunnel-center-line
博士をベリサリウス

@julien:あなたはすでにあなたの答えにそれをリンクしています。私はそれを読んでいますが、それは私の特定の質問には答えません(言い換えれば、「私はすでにMATを見つける方法を知っています-しかし、誰かが非Delaunay アルゴリズムを知っているのか疑問に思っています -問題は私のコーディングではありません;)]ローカライズされた変更に対して効率的です ')。SOには答えもありませんでしたが、あまり答えられませんでしたが、多くの労力を費やし、考えることがたくさんありました。以下の答えはどれもそれほど良いものではありません(これは私のせいかもしれません)。
sje397

回答:


6

中間軸変換の適切な近似を描画しました。Delaunayの三角形分割は、実際に適切なアプローチを提供します。(主な課題は、MATの一部が単なる線分ではなく放物線の一部であることです。)

学術文献で、作業コード(通常はC / C ++で)の参照に出くわしました。Google Scholarで検索し、古い論文を探します(新しい論文は3D計算に焦点を当てているようです)。


Delaunayを使用して、動作するコードがいくつかあります。私は本当に他の方法があるかどうか尋ねています。
sje397

1
@ sje397まず、Delaunayは問題をほぼ解決するだけなので、その理由だけで、より良いコードを調査する価値があります。第二に、確かに他の方法があります。(1)内部バッファを使用してMATを検索し、(2)ポリラインのユークリッド距離グリッドで地形分析を実行します。どちらもはるかに非効率的で、結果が悪いため、どちらも言及しませんでした。おそらく、2番目の方法は、適度に高速な動的ソリューションに適しています。
whuber

4

「ポリゴンスケルトン」を調べる価値があるかもしれません。

http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/Chapter_main.htmlに C ++ソースサンプルがあります。


暗闇に感謝します。CGALについてさらに検討します。ただし、マップデータが変更されたときに再計算に費用がかからないという要件は困難です。
sje397

CGALは非常に高速です-オンザフライの計算が可能です。:そうしないと、いわゆる「運動データ構造」を見ている可能性がcgal.org/Manual/3.3/doc_html/cgal_manual/...
ジュリアン

「スケルトン」はMATの別の用語です。「中間軸変換」を検索すると、私の経験では「スケルトン」を検索するよりも多くのヒットが得られました。
whuber

「スケルトン」はより一般的なようです-MATはスケルトンの特定のアルゴリズムの1つにすぎませんか?何であれ、それはトピックではありません...!
ジュリアン

CGALのライセンスには制限があります(高価です-これは商用ソフトウェアです)。
sje397
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.