C++ 如何在c++;

C++ 如何在c++;,c++,geometry,C++,Geometry,假设我有一个N对正长坐标(点)的列表 如何找到包含所有矩形的最小矩形? 矩形也可以有浮动坐标,可以以任何角度旋转并进一步缩小。。。不仅仅是X,Y,宽度和高度 我已经知道如何找到最小的多边形或不旋转的矩形,但这不是我需要的…我想知道如何找到任意方向的最小包围盒。这说明你可以通过使用最小矩形必须有一条边与凸包的一条边共线的事实来解决这个问题。我不知道这是否对你有帮助,但以下是我对如何解决这个问题的看法 您将需要函数来查找“最拐角”点(在您的示例中,左2点和右2点)。给定这4个点,用线将它们连接起来

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


我已经知道如何找到最小的多边形或不旋转的矩形,但这不是我需要的…我想知道如何找到任意方向的最小包围盒。

这说明你可以通过使用最小矩形必须有一条边与凸包的一条边共线的事实来解决这个问题。

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

您将需要函数来查找“最拐角”点(在您的示例中,左2点和右2点)。给定这4个点,用线将它们连接起来

(注意,在示例图像中,生成的矩形不会包含顶点,因此…) 然后需要一个函数来确定生成的矩形是否包含所有给定的点;如果没有,则将端点(在本例中,生成的矩形的顶部2个点)扩展N(这是单个度量值…比如说一个像素,或者如果您很聪明,则是到超出边界的点的距离加/减一取决于方向)并重新计算


“最小面积框”一节有各种各样的例子。

也许这篇文章可以帮助你:

也许这对你有用:
  • 找到所有点的中心点(所有x的总和/x的数量,y相同)
  • 以距离中心最远的点作为角点
  • 以角点的90°角投影穿过第二个最远点的线
  • 迭代中心点另一侧的点并找到最小值

“矢量合成算法”听起来像是出自CSI:Miami:PWow。这很好,但我认为他们不会对我的有任何实际用途。。。有一个类似的问题,虽然不完全相同,但你可能能够适应。@kojiro不,它甚至不接近我所需要的。@Vercas:它必须有多“完美”?“接近最优”行吗?维基百科页面不包含算法;它链接到的“旋转卡钳”页面确实包含一个算法,但不是针对这个问题。一些实际链接:。注意,这种方法适用于“最小值”的任何合理定义;尤其适用于“最小面积”和“最小周长”;这两条线经常重合,但并不总是一致的。谢谢Gareth(和大家好!)我已经更改了答案的措辞。对于凸包中的每个线段,您可以使用它计算边界矩形的面积,并选择最小的。它在船体上的点数是O(n^2)。嗨,保罗。我想可能是同一个保罗·汉金:-)。托马斯,一旦你得到了凸壳,如果你做得对的话,它实际上是O(n)。例如,请参阅我上面评论中的第一个链接;在这种情况下,您需要导出表示两点之间连接的函数(y=mx+b),然后沿着该路径继续——沿着原始矩形的两侧。谢谢!该文件只包含我需要的函数!我也在那个网站上找到了更多我需要的东西!我知道这是我今天早上用的。找到某样东西的一半战斗是知道正确的术语!我完全明白你的意思……即使谷歌没有;)从描述来看,这似乎并不准确。一个真正的最小面积框很可能有一个中心不是点的平均值。他们似乎在使用快捷方式来获得非常接近的结果。@Vercas:这不计算最小框。正确答案由“旋转卡钳”给出。不幸的是,它没有帮助。本文解决了更难的问题,找到一个边界正方形。如您所见,复杂度为O(N²Log(N)),而边界矩形很容易在O(N Log(N))中获得。步骤3和步骤4非常混乱,对我来说毫无意义