我作为输入的2D多边形孔,我需要找到它的直骨架,像图片:用于创建直骨骼的Java库?
http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/exterior_skeleton.png
也许有一个很好的Java库呢?
如果不是,你能指点我对算法的很好的解释,所以我可以自己实现它吗? (我还没有在Google上找到好资源)
我作为输入的2D多边形孔,我需要找到它的直骨架,像图片:用于创建直骨骼的Java库?
http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/exterior_skeleton.png
也许有一个很好的Java库呢?
如果不是,你能指点我对算法的很好的解释,所以我可以自己实现它吗? (我还没有在Google上找到好资源)
我写了一会儿回来。不知道它是否足够强大。 http://code.google.com/p/campskeleton/
Webstart的位置: http://dcs.gla.ac.uk/~tkelly/bits/wss/launch.jnlp
编辑: 啊。我看到“Straight Skeleton”是一个技术术语。维基百科文章引用了几种算法。你看过那些吗?
据我所知,你有一个(凸?)多边形。从中减去1个或更多(可能非凸)多边形。你想把结果变成一组无多孔的多边形。你有没有额外的规则可以申请?
我很难从您提供的示例中提出一组规则。外部多边形是非凸的;所以它似乎并不像你试图找到一个凸集来表示结果(这是一个相对常见的任务)。
如果您可以使用下面显示的细分,算法非常简单。你能澄清吗?
您可以使用JTS Topology Suite。这是一个非常有能力的图书馆,我已经用于一些项目 - 从来没有直骨骼,但它可能是可能的。
请参阅http://www.sable.mcgill.ca/~dbelan2/roofs/roofs.html其中包含一个小程序。
我能问你什么是你寻找直骨架目的是什么?它是个人还是商业?我很想知道如何使用它来解决实时问题?我有一个java库,这样做。我的算法列在这里http://web.stcloudstate.edu/rsarnath/skeleton/definition.htm
商业。就我而言,我实际上是在寻求一种“减薄”多边形的方法。直骨骼看起来不错,但速度太慢 - 我需要在弱机器上实时(<1秒)获得复杂多边形(由数千个点组成)的“中心线”。所以最后,我决定创建多边形的约束Delaunay三角剖分,并连接三角中心 - 它给了我很好的“中心线”近似值。 – Rogach 2012-01-18 09:27:48
好的。但我确实注意到了一个错误 - 有时候它看起来像骨架错过了一个细分市场。 – Rogach 2011-04-15 12:31:05
我玩过你的图书馆,它很棒!现在我只需要找到一种从脸上提取骨架线的方法。 :) – Rogach 2011-04-24 11:10:57