C++ 计算多边形的最小面积矩形

C++ 计算多边形的最小面积矩形,c++,c,geometry,java,C++,C,Geometry,Java,我需要计算多边形周围的最小面积矩形(最小可能矩形) 我唯一的输入是多边形中的点数 我也有点的坐标。使用凸多边形的算法,或者凸壳。您当然需要多边形中点的坐标,而不仅仅是点的数量。显然,您需要点的坐标才能得到答案。如果矩形与X和Y顶点对齐,则解决方案很简单。如果您想要在任何角度上获得尽可能最小的矩形,则需要执行某种优化过程 这就是所谓的,它是OCR包中使用的最基本的算法。您可以从包中找到使用旋转卡钳的实现。获得源代码后,请查看此文件 cv/src/cvrotcalipers.cpp 您需要的方法是

我需要计算多边形周围的最小面积矩形(最小可能矩形

我唯一的输入是多边形中的点数


我也有点的坐标。

使用凸多边形的算法,或者凸壳。您当然需要多边形中点的坐标,而不仅仅是点的数量。

显然,您需要点的坐标才能得到答案。如果矩形与X和Y顶点对齐,则解决方案很简单。如果您想要在任何角度上获得尽可能最小的矩形,则需要执行某种优化过程

这就是所谓的,它是OCR包中使用的最基本的算法。您可以从包中找到使用旋转卡钳的实现。获得源代码后,请查看此文件

cv/src/cvrotcalipers.cpp

您需要的方法是
cvminarealect2()

首先执行一项操作,并获取点集的值。然后您可以使用类似于

的方法,并遵循以下算法

  • 将多边形旋转到XY平面上
  • 拾取一条边并将该边与X轴对齐(使用arctan)。使用“最小/最大x,y”查找边界矩形。计算面积并存储在列表中
  • 对剪裁多边形中的其余边执行相同的操作
  • 选择面积最小的矩形
  • 将边界矩形旋转回步骤1和步骤2的共面反向旋转

  • 有关更多详细信息,请查看链接

    是否仅查看点数?或者你也有坐标吗?多边形是任意方向的还是矩形必须与坐标系正交?你需要坐标。或者,具有一条边的长度,并且限制所有边具有相同的长度。或者你可以回答:4。(矩形中的点数)呵呵。是的,多边形可以是任意方向的,对于矩形,你认为它应该是在面积方面尽可能相同的。你自己也试过吗?我想这会对我有帮助。。更精确地说,我必须计算多边形的宽度和长度!!!这不是问题:当你应用算法时,你会依次计算与每条边对齐的边界框的宽度和长度。你能详细说明一下优化过程吗?有几个人已经提到了旋转卡钳算法。基本上就是这样做的。你做的是基本的最小/最大边界框,但是坐标系旋转到每边的角度。我找不到这个方法的正确答案。你能告诉我这个感恩节的确切时间吗