如何在c ++中找到任意定向的最小边界框

时间:2011-03-15 11:53:41

标签: c++ geometry

所以假设我有一对N对正长坐标(点)的列表 如何找到包含所有这些矩形的最小矩形? 矩形也可以有浮动坐标,可以任意角度旋转,进一步收缩......不仅仅是X,Y,宽度和高度!

Just an image I found on the web...

我已经知道如何找到最小的多边形或没有旋转的矩形,但这不是我需要的...我想知道如何找到任意定向的最小边界框。

5 个答案:

答案 0 :(得分:10)

wikipedia page指出,您可以通过使用最小矩形必须与凸包的一个边缘共线的事实来解决此问题。

答案 1 :(得分:9)

请参阅http://www.geometrictools.com/Source/ComputationalGeometry.html

“最小区域框”部分有各种示例。

答案 2 :(得分:3)

也许这篇论文可以提供帮助:Smallest k point enclosing rectangle of arbitrary orientation

答案 3 :(得分:1)

我不知道这对你是否有帮助,但这是我对如何解决这个问题的看法。

您需要使用函数来查找“最角落”点(在您的示例中,左侧2点和右侧2点)。鉴于这4点,用线连接它们。

(请注意,在您的示例图片中,生成的矩形不会包含顶点,因此......) 然后,您需要一个函数来确定生成的矩形是否包含所有给定的点;如果没有,将端点(在这种情况下,生成的矩形的前2个点)扩展N(这是一个单一的度量...比如一个像素,或者如果你很聪明,那么到达点的距离就是边界加/减一个取决于方向)并重新评估。

答案 4 :(得分:1)

也许这适合你:

  • 找到所有点的中心点(所有x的总和/ x的数量,y的相同)
  • 从中心的最远点作为角点
  • 投影线穿过拐角点90°角的第二个最远点
  • 迭代中心点另一侧的点并找到最小值