多边形归纳问题中的多边形


9

我想对以下所有帖子表示歉意。选择了错误的论坛将其最初发布在此。但是,不是将其完全浪费掉,而是将问题改写为真正的“理论计算机科学”问题。

问题:创建一个算法,该算法在2D平面中采用一组n个有序点,这些点形成一个可能是也可能不是凹面的简单多边形A的轮廓,并创建一个具有m个点的新多边形B,从而:

  1. A中的所有点都包含在B中
  2. 3 <= m <n
  3. B是所有B中集合中面积最小的多边形
  4. B必须是简单的多边形(即没有自相交)。
  5. 该算法的输入是面A和“ m”。
  6. B中的段与A中的段可以重合。

一些示例输入和预期输出:

  1. 如果A为正方形且m为3,则B为包含A的最小表面积的三角形。
  2. 如果A为六边形且m为4,则B将为具有A的最小表面积的四边形。

祝所有尝试此问题的人都好运。我可以向您保证,这将是非常困难的,尤其是现在解决方案必须是最佳的。


1
@Joe:不正确:如果A是一个正方形,那么Thirian要求包含A的最小面积三角形。另一方面,如果A是一个三角形(),那么实际上没有有效的解决方案。ñ=3
Jeffε

3
我想在我的第一条评论中加上17。为什么是20?
杰夫斯

3
FFT难道不是“复杂”的低门槛吗?
Sasho Nikolov

2
我不认为如果您(例如)设置m = 3,问题根本就不会改变是完全不对的。问题是,您可能需要以m为单位的时间指数,如果m固定为某个数字,就可以了,但如果m是输入的一部分,则不正确。
Suresh Venkat 2012年

5
“每个人都知道问题出在哪里”是不正确的。我们之所以问是因为未指定的选择会有所作为。
Suresh Venkat 2012年

Answers:


10

我不知道您的多边形看起来如何,但是简化的Ramer–Douglas–Peucker算法版本就足够了:

  • 对于每个部,计算面积一个Ĵ 的三角形 P一世P一世+1个P一世+2 由三个连续点组成;
  • 对于每个凹形部分,计算面积ķ 两个三角形中的一个 P一世P一世P一世+1个P一世+1个P一世+2P一世+2 由两点的扩展形成 P一世P一世+2 和中间点 P一世+1个
  • 计算 一世ñ{一个Ĵķ} 并删除相应的点(如果在凹入部分上进行了操作,则删除该点);
  • 循环直到 ñ- 点已被删除。

在此处输入图片说明
多边形的边界(一个Ĵ 绿色三角形 ķ红色三角形)。在右边,边界消除了两点。

对于更复杂的算法,尽管您的第一个条件(A中的点包含在B中)暗示了一些附加的缩放操作,但是您可以搜索“ 多边形归纳技术 ”。


@Suresh:我很确定当前的4次投票是为了透明度,而不是(几乎是微不足道的)算法:)
Marzio De Biasi 2012年

1
这会遇到与Ramer-Douglas-Peucker算法相同的问题:不能保证输出是简单的多边形!
杰夫斯

1
@Jeffe:您是对的,但是(如果多边形复杂,则不是最佳选择)可以避免导致冲突的简化。最后,如果还有其他点必须删除但无法避免使用非简单多边形,请使用冲突解决方法(例如,计算相交点并完全丢弃“孔”)。但是,我想从OP中看到一个真实的例子。
Marzio De Biasi 2012年

1
@MarzioDeBiasi可能有效。但是可能不会。我认为您描述的每个简化都可能导致自相交。而“抛出循环”会使情况变得更糟,而不是更好。在实践中,这可能是一个很好的解决方案,但请记住我们在哪里!
Jeffε

谢谢Marzio,我现在至少知道这些问题现在叫什么!遗憾的是,您给出的解决方案是我建议的解决方案中的(3)和(4),而(4)却有问题。椭圆拉伸得很厉害,因此尖锐的尖端的角度大约为30度或更小,很容易违反要求(1)。
瑟兰2012年

6

我很早以前写过一篇论文,详细介绍了一种线性时间算法,该算法可以找到包围点集(或多边形)的最小面积三角形:

J. O'Rourke的,阿洛克AGGARWAL,Sanjeev Maddila,迈克尔鲍德温, “寻找最小包围的三角形的最优算法,” J.算法,1986,7:258--269。连结

我们的工作之后是通用算法:

“最小的外接多边形”,Alok Aggarwal,JS Chang和Chee K. Yap, 《可视计算机》,第1卷,第2期(1985年),第112-117页。连结

您可以使用Google学术搜索跟踪以后引用这些文献的论文,以找到改进和相关工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.