我面临的问题是通过在初始多边形中添加对角线(它们本身并不相交),将简单多边形(即没有孔的多边形)有效地分解为较小的简单多边形。 在其它方面,这里是函数的Java的签名,我想有效地实现(线性时间或的n * log(n))的:通过添加对角线来分解简单多边形
public static List<SimplePolygon> addDiagonals(SimplePolygon polygon, List<Edge> diagonals);
其中多边形是由表示初期多边形双连接边列表和对角线是边的列表,其中边只由开始和结束节点组成。该函数必须返回多边形中添加对角线所产生的子多边形列表。这里是一个图像显示我想要的东西:
起始多边形是在左上角,和另外5人是通过添加对角线产生的子多边形。 我很难找到如何有效地实现这种分解,因为它很容易重复节点事件对角线,但如果大量的对角线是从同一个节点出去,我总是要检查与节点相邻的顶点是否重复如果是这种情况,那么我将对角线添加到副本(假设原始属于另一个子多边形),那么我必须再次检查这个重复节点是否也没有重复(如果已经有一个对角线与此节点相邻)等。 您有关于如何有效地进行这种分解的想法吗?对不起,如果解释不够清楚。 谢谢!
你显示的细分看起来是任意的。你能否澄清为什么你选择的对角线特别好?通常人们想分解成凸多边形,你会认为这是一个好的解决方案吗?另外,您能否为我们提供您的示例的初始数据? – 2015-04-03 13:01:55
@CodieCodeMonkey它是分解成y单调片:)初始数据只是以CCW顺序给出的多边形点的(x,y)坐标,从随机节点开始。 – Jo8192 2015-04-05 10:27:26
@ Jo8192这似乎问:给定对角线,分割多边形。找到/计算对角线的算法是否也能够分割多边形?我猜测它会在遍历多边形时计算对角线... – 2017-05-10 01:06:35