寻找隧道中心线?


19

我有一些地图文件由代表隧道的“折线”(每条线只是一个顶点列表)组成,我想尝试找到隧道的“中心线”(下面用红色粗略显示)。

替代文字

过去,我使用Delaunay三角剖分取得了一些成功,但我想避免使用该方法,因为它(通常)不允许轻松/频繁地修改我的地图数据。

关于如何执行此操作的任何想法?

我正在使用相当原始的C ++。


gis.stackexchange.com/q/177/162还可满足您的需求:骨骼化算法
julien 2010年

3
我认为与SO的交叉链接很重要,因为那里也有答案stackoverflow.com/questions/3983613/find-tunnel-center-line
belisarius博士

@julien:您已经在答案中链接了它。我通读了一下,但是没有回答我的特定问题(换句话说,是:“我已经知道如何找到MAT了-但我想知道是否有人知道非Deelaunay 算法 [即不是lib-问题不在于我的编码;)]对于本地化更改是有效的')。SO上有一个答案,虽然也没有完全回答,但付出了很多努力,并给了我很多思考的机会,因此我将支票授予了那个家伙,直到出现更好的情况为止。下面的答案都没有那么好(这很可能是我的错)。
sje397 2011年

Answers:


6

您已经很好地近似了“中间轴变换”。Delaunay三角剖分确实提供了一种很好的方法。(主要挑战是MAT的一部分是抛物线,而不仅仅是线段。)

我在学术文献中遇到了对工作代码的引用(通常记得在C / C ++中)。在Google学术搜索上搜索并查找较旧的论文(较新的论文似乎专注于3D计算)。


我有一些使用Delaunay的工作代码。我真的在问是否还有其他方法。
sje397

1
@ sje397首先,Delaunay仅能大致解决问题,因此仅出于这个原因,值得研究更好的代码。其次,确实还有其他方法。我可以简要概述两个内容:(1)通过内部缓冲区搜索MAT;(2)在折线的欧几里得距离网格上执行地形分析。我没有提到任何一个,因为两者效率都低得多,并且产生的结果也较差。可以想象,第二种方法适用于合理快速的动态解决方案。
ub

4

可能值得研究“多边形骨架”。

http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/Chapter_main.html上有一些C ++源代码示例


谢谢。我将进一步研究CGAL。但是,当我的地图数据更改时,重新计算并不昂贵的要求是困难。
sje397 2010年

CGAL相当快-动态计算应该是可能的。否则,您可以看看所谓的“动力学数据结构”:cgal.org/Manual/3.3/doc_html/cgal_manual / ...
2010年

“骨架”是MAT的另一个术语。根据我的经验,搜索“中间轴变换”比点击“骨骼”产生了更多更好的结果。
ub

“骨架”似乎更通用-MAT只是骨架的一种特定算法,对吧?无论如何,这不是主题...!
julien

CGAL的许可证似乎是限制性的(即价格昂贵-这是商业软件)。
sje397
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.