algorithm - 找到具有给定点数的最小包含凸多边形

标签 algorithm language-agnostic geometry polygon computational-geometry

给定一个凸多边形和一个数字 N,我如何找到最小的多边形

  1. 包含原始多边形的每个点
  2. 正好有N个角点

例如,假设我有一组点并为它们计算凸包(绿色)。现在我想找到包含所有点的最小四边形(红色)

smallest quadrangle enter image description here

很容易看出,任何其他具有 4 个角的多边形要么更大,要么无法包含所有点。但是在一般情况下如何找到这个多边形呢?


编辑:

最小的多边形是指覆盖最小面积的多边形,尽管我不确定最小的周长是否会给出不同的结果。

我添加了另外两个示例图片,遗憾的是它们似乎不适用于其中一个答案中的“删除边缘”方法


一些背景信息:

目标是通过图像识别准确确定形状。例如,拍摄一张长方体的照片。 2D 照片中框内的所有点都将包含在一个 6 角凸多边形中。然而,由于现实世界的形状没有完美的角,并且相机添加了一些模糊,因此该多边形的边缘将变圆。 请参阅问题 Getting corners from convex points 中的附图

blurred corners

最佳答案

您需要在问题中定义“最小”的概念。不管你怎么定义, 这个问题已经在计算几何文献中进行了大量研究。 关键搜索短语是最小封闭 k-gon:

  • Mictchell 等人:“Minimum-Perimeter Enclosing k-gon” 2006 ( CiteSeer link )
  • Aggarwal 等人:“最小面积外切多边形”1985 (CiteSeer link)
  • O'Rourke 等人:“寻找最小封闭三角形的最佳算法”,1986 年,Algorithmica ( ACM link )

一般的算法都不简单 (尽管最小面积三角形或矩形的算法很简单)。 根据你的目标,你可能不得不放弃任何数学概念 “最小”并进行启发式。

关于algorithm - 找到具有给定点数的最小包含凸多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11602259/

相关文章:

algorithm - 特征 - 旋转矩阵的重新正交化

看不懂这个圆周率算法

algorithm - 构建数组中元素的有向正则图

language-agnostic - 通常在 URL 中始终散列唯一标识符是个好主意吗?

algorithm - 从无浪费的位序列中解码字母 ('a' .. 'z' )

math - 以编程方式校正鱼眼失真

algorithm - 连接线段中的点

JAVA:BigO 算法 - equalsIgnoreCase 和 CompareTo

algorithm - "Waiting lists problem"

c++ - 如何在 "forward direction"中移动转换?