凸多边形中最短的区域平分线

时间:2018-10-14 14:13:26

标签: algorithm

我很难找到它:

Shortest Bisecting line picture

我不知道如何找到这个,甚至不知道编写算法来做到这一点。你能帮我吗?

预先感谢

2 个答案:

答案 0 :(得分:0)

提示:

我将按以下方式解决此问题:

  • 以四边形研究问题,并建立一条规则,该规则将点在边缘上的位置与将面积减半的线段的长度相关,或更普遍地分为两个指定部分。

  • 找到给出最短行的条件。

  • 一般化到普通多边形边缘上的一个点。

我相当确定,对于在边缘上移动的点,最小配置以有限的数量出现,并且通过扫描所有边缘,您可以枚举所有候选并找到最短的候选。

答案 1 :(得分:0)

每条将区域分成两半的线都将通过一个称为“中心”的点:https://en.wikipedia.org/wiki/Centroid

此外,尽管形心重心,但每一条线都会将区域一分为二。

因此,第一步是找到质心。然后,当您在多边形上移动一个点时,只需要从该点到质心画一条线即可在另一侧找到该点。您将遍历所有将区域分成两半的线段。您的任务是找到这些细分中最短的细分。

对于具有N个顶点的多边形,当穿过质心的线的角度发生变化时,它会扫出N个不同的领结形区域,在该区域中,线的多边形边都不会改变。当穿过质心的线在任意一端碰到多边形顶点时,区域就会改变。

针对此问题的有效算法将找到每个区域中最短的片段,然后从中选择最小值。它可以是接触多边形顶点的区域的一端(易于测量),也可以位于中间的某个位置。

当最小距离在该区域的中间某个位置时,可以通过三元搜索(https://en.wikipedia.org/wiki/Ternary_search)找到它,或者可以使用微积分。我将质心作为原点,将区域两侧的多边形边缘转换为极坐标,然后翻转180度,将它们加在一起,然后找到使半径最小的角度。

以这种方式工作的算法可以为O(N)时间中最短的等分线得到准确的答案。