【问题标题】:Cut the Cake, or polygon decomposition切蛋糕,或多边形分解
【发布时间】:2014-08-12 17:56:10
【问题描述】:

我面临以下问题:我在整数网格上获得了一组坐标,这些坐标定义了多边形的顶点。多边形保证是凸的。事实证明,这样的多边形总是可以被 2 条正交线切割成 4 个面积相等的部分。我们将这些线的交点称为P。 鉴于该集合,我应该计算多边形内P 的坐标以及线条需要打开的角度,以便线条将多边形分成 4 个相等的部分。

我意识到,一般来说,切蛋糕问题没有“好的”解决方案。但它的这种特殊情况应该。 我已经搜索了一种算法来解决这个问题,但没有发现任何有用的东西。 我应该去哪里看?

我的方法是计算多边形中心的坐标(可以或多或少地轻松完成),将Pthere 放置,然后“摆动”线条直到部件的区域匹配。但这听起来太不雅了。

UPD:that's the problem I'm dealing with。也许这个问题应该暂停,直到我提出实际的代码问题。

【问题讨论】:

  • 我感觉坐标是整数,因此可以对它们执行搜索,例如查找平均 x 坐标。但这并没有多大帮助。

标签: computational-geometry polygons convex-polygon


【解决方案1】:

这是解决方案的部分草图:

选择任意方向并找到与该方向平行的线,将多边形一分为二。为此,请在每个顶点上画一条线以将多边形分解为平板。板的相应区域将告诉您所需的线相交的板。简单的线性插值将给出直线的确切位置。

现在你的多边形被分成两个凸多边形。对于每一半,使用垂直方向重复上述过程。一般来说,你会得到两个不同的分离器,剩下要做的就是找到它们重合的方向。

在给定方向上,分割器与多边形的四个特定边相交。如果稍微旋转,它们仍然与相同的四个边相交。您可以在角度范围内分解一个完整的转弯,以使四个相交的边保持不变。

知道四个相交的边,您可以建立关系,告诉您两个垂直分离器之间的距离作为角度的函数。然后您可以计算两个分离器重合的角度,并检查该角度是否属于为这些边缘定义的范围。

通过依次尝试所有范围,您会找到解决方案。

注意:角度范围的限制对应于平行或垂直于连接两个顶点的线的方向。

【讨论】:

  • 我在考虑类似的事情,但看起来我必须重新计算我得到很多零件的面积——可能在每次旋转之后。
  • 我猜二分法可以加速这个过程。这将是受欢迎的,因为似乎有 O(N²) 间隔。
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多