将多边形分成2个相等的部分

时间:2014-08-08 16:03:52

标签: algorithm polygons

我有凸多边形,我希望获得平行X轴的线,将多边形分成2个相等的区域。 我试图实现以下(对于X轴): 0.按增量Y坐标顺序对多边形的所有顶点进行排序。 1.获得具有最小Y坐标的点P. 2.通过穿过P的垂直线分割多边形。 3.遍历所有顶点并使用x>添加所有顶点。 P.x到q数组和所有其他到p数组 4.遍历所有顶点的数组,查看当前顶点所属的位置以及可以投影到的线。 5.计算我得到的梯形面积。

更新: 我决定选择2个vertciex:最大和最小Y坐标和由它们给出的线2划分2个数组p和q中的所有顶点。 现在我需要按照给定的比例划分梯形。如果我知道基础和高度,我怎么能这样做? 如何按给定比例分割由p1和p2顶点给出的梯形面积? enter image description here

2 个答案:

答案 0 :(得分:0)

与另一个答案类似,除了二进制搜索操作较少,这也给出了一个确切的答案。对顶点的y坐标进行排序。设m和M为最小和最大y坐标。然后从中间顶点y坐标y0开始,看看通过它的线是否给出相等的面积。如果不是,则根据顶部或底部是否有更多区域设置m = y0或M = y0。您将找到一个给出相等面积的顶点y坐标,或者您将找到两个相邻的顶点y坐标,其中一个给出顶部更多区域,另一个给出底部更多区域。因此,您知道正确的分割位于这两个相邻的y坐标之间。根据正确的分割线的位置来象征性地计算顶部和底部区域(您可以这样做,因为分割线y坐标的范围不会与任何顶点重叠)。然后将两个区域表达式设置为相等,并求解正确的分割线。这种方法的优点是你得到一个确切的答案,它只需要最多lg(n)二进制搜索操作,其中n是顶点的数量。

如果你对多边形进行三角测量,你将拥有最多n个三角形,每个三角形的面积可以在恒定时间内预先计算,当你用分界线切割三角形并对结果区域进行三角测量时,这将产生于大多数O(n)个附加三角形,其每个区域可以在恒定时间内计算。因此算法的二进制搜索部分需要O(n log n)时间。最终计算(求解精确的分裂线)需要线性时间。因此总体时间复杂度为O(n log n)。

答案 1 :(得分:0)

以下是一种可以有效完成的方法: -

1. A horizontal line cut the convex polygon at exactly two points.
2. You can evaluate for each line segment forming the side of polygon 
   the interval of its y values.
3. Using these intervals you can easily determine the overlapping pairs of lines using sorting.
4. you now have interval of y values (y1,y2) and corresponding lines which are
   intersected within these interval.
5. Consider a pair of line (l1,l2) that are intersected by given y=k where y1<=k<=y2
6. x1 = (k-c1)/m1 and x2 = (k-c2)/m2
7. find difference between the areas of two polygons formed by them is to minimized.
8. minimize F(k) = (A1-A2)^2 = d/dk[(A1-A2)^2] = (A1-A2)*(d/dk(A1)-d/dk(A2)) = 0.
9. as F(K) is only single variable continuous function in interval [y1,y2] you can easily find its solution.
10. The given y=k is minimum for given interval for y.
11. record minimum value of absolute diff for all interval and select the one which is 
    minimum in all intervals.

时间复杂度: -

Finding overlapping intervals is O(nlogn) using sorting.
Finding minimum must take O(intervals*n).

使用顶点查找多边形区域: -

Area of polygon using vertices