查找使用C#多边形的中轴(Find medial axis of a polygon using C

2019-07-29 12:00发布

我一直在负责找出如何找到一个多边形的中心线。 我的谷歌搜索使我相信,我需要什么叫“中轴”。 像这样:


(来源: kiev.ua )

据我读过,我需要的东西可以通过使用二维Voronoi图构建算法段产生。

我发现在CodePlex上(FortuneVoronoi)沃罗诺伊算法的C#版本和应用我的多边形来之后,我结束了这一点:

替代文字http://www.carbonatlas.com/geonotes/gaia_voronoi.png

绿色是原来的多边形。 橙色是的Voronoi顶点和黑线是沃罗诺伊边缘。

我可以看到的是什么,我需要在那些顶点的气质,但我不能确定过滤掉所有的东西我不需要所需的下一步。

我会很感激你能提供任何帮助。

Answer 1:

一个简单的解决方案将作为建议的评论:

  1. 构建多边形顶点的Delaunay三角。
  2. 确定多边形内部的顶点Voronoi图(见http://en.wikipedia.org/wiki/Point_in_polygon )
  3. 输出维诺边连接两个内部的Voronoi顶点。

如果你有大量的数据的交叉点可能是相当昂贵的。

然后,你可以做一个类似的方法像问题 ,而且这个解决方案可以为你工作,以及。 我会做它的方式:

  1. 构建多边形顶点的Delaunay三角。
  2. 插入没有覆盖的德劳内每边的多边形边的中点。 直到所有多边形边缘被德劳内边缘覆盖递归地做到这一点。
  3. 标记所有德洛奈边对应于一个多边形边。
  4. 使用步骤3-5提取中轴。 在这个解决方案

PS。 注意,这两个解决方案为中轴的一些近似 ,计算它到底是更昂贵,但作为传情...你可以得到的结果是这样的黑色输入采样点:



Answer 2:

类似的构建体是直骨架 ,其可以通过缩小多边形入本身和跟踪顶点随着接近中心构成。 这可能是更容易一些构造,虽然它并不像中轴相同的曲线。



Answer 3:

哇。 我要在这里走出去的肢体,并建议也许算法是困惑的内部与多边形的外侧。 当你定义的边缘,你原来的多边形顶点,你必须确保他们以这样的方式“内部”始终使用类似的“右手法则”发现定义。 只要看看在右下角的多边形,它看起来像你的多边形的边缘实际上与自身交叉。 也许算法是看到这一节,和其他人,如“内而外”。 底部同样离开了。

这是我的直觉,该算法似乎并不能够确定什么方向是内部的,哪些是外部的。

我认为,一个天真的方法是过滤掉所有Voroni“节点”是多边形之外,但是,我不认为会看。 在您的图表左看右看,它看起来像每个节点有3个边,它连接到其他节点。 也许可以过滤掉,其中任何3个的边缘被连接到多边形之外的节点的节点。 将这项工作?



文章来源: Find medial axis of a polygon using C#