我有一个由点列表表示的闭合轮廓,我需要将它分成相等的部分,知道零件的面积。
我认为我可以使用一些细分算法,比如Delanuy细分。但是使用这种方法,我必须给出细分部分的质心。
任何人都有一些提示吗?
答案 0 :(得分:2)
如果我理解正确:假设一个矩形表示区域10,目标区域为1,则需要将矩形划分为10个部分,每个部分的面积为1.因此将矩形切成10个薄矩形(如吉他品,或面包片)会做。
如果是这种情况,那么我会做以下事情: 创建一个函数来计算凸多边形的面积。这是相当微不足道的(因为poly是凸的)。
观察,因为输入多边形是凸的,任何将多边形分成两部分的线段都会在两个地方与多边形相交。具体来说,您可以通过选取多边形的顶点并将其连接到多边形的每个其他顶点(如扇形)来对多边形进行三角测量。
以这种方式进行三角测量将创建一个接近您所需要的分区。假设输入多边形由顶点列表poly = {v1,v2,v3,...,vn}给出,其中vert是唯一的,没有三个是共线的(凸多边形)。
观察给定由(v2,v3,v4)形成的多边形的三角形,我们可以计算其面积A1。现在,如果我们通过向下一个添加一个额外的顶点(例如v5)将三角形增长为多边形,以形成(v2,v3,v4,v5),则区域增加到A2(两个三角形的总和,(v2,v3,v4)和(v2,v4,v5)。由于线性,如果你想将原始三角形增长为A2',其中A1< A2'< A2,你可以在线段(v4,v5)上插值以找到v4'这将为您提供所需的正确区域A2'。
由于您可以计算初始输入多边形的总面积,并且您知道每个细分的目标区域,因此可以将输入多边形切割为所需区域的片段,直到细分整个事物为止。如果你想要一个更好的分区,你可以从多边形的中心开始,即第一个(种子三角形)将是(center,v1,v2)。然后缩小/增长直到所需的区域,移动到下一个三角形,重复。
希望有道理:D