Algorithm 包含一组点的多边形

Algorithm 包含一组点的多边形,algorithm,language-agnostic,geometry,polygon,Algorithm,Language Agnostic,Geometry,Polygon,我有一组S点(2D:由x和y定义),我想找到p,最小的(意思是:点的数量最少)多边形,它包围了集合中的所有点,p是S的有序子集 有没有已知的算法来计算这个?(我在这一领域缺乏文化是令人惊讶的…) 谢谢你的帮助有很多算法可以解决这个问题。它被称为“”。尤其是在搜索“”时,您也会找到解决方案 一种方法是找到最左边的点,然后重复搜索所有其他点都位于线p(n-1)p(n)右侧的点。您的意思可能是想要最小的区域,即凸包 如果你真的想要最少的点,你可以制作一个具有超大顶点位置的三角形,这样所有的点都被包围。

我有一组S点(2D:由x和y定义),我想找到p,最小的(意思是:点的数量最少)多边形,它包围了集合中的所有点,p是S的有序子集

有没有已知的算法来计算这个?(我在这一领域缺乏文化是令人惊讶的…)


谢谢你的帮助

有很多算法可以解决这个问题。它被称为“”。尤其是在搜索“”时,您也会找到解决方案


一种方法是找到最左边的点,然后重复搜索所有其他点都位于线p(n-1)p(n)右侧的点。

您的意思可能是想要最小的区域,即凸包


如果你真的想要最少的,你可以制作一个具有超大顶点位置的三角形,这样所有的点都被包围。

这里有一个简单的解决方案

从任意三个点开始形成三角形。使用以下操作将每个附加点添加到多边形:

将边划分为两条连续路径,其中在一条路径中,每条边的直线将要添加的点与多边形的其余部分分离(我们称之为“分离路径”),在另一条路径中,每条边的直线的点位于多边形的同一侧

(注意:只要形状保持凸(必须保持凸),这两条路径将是连续的,并形成整个形状)

如果分离路径没有边,则该点位于多边形内部,应忽略该点,否则,请从多边形中删除分离路径。将其替换为两段,将分离路径的每个端点连接到新点


塔达!:)

这里有一个关于凸包算法的好资源:

你的大三角形中的点p不是s的子集,这是一个要求。@DanielDaranas如何获得这个超大三角形的顶点?凸包不是包含每个点的最小多边形。有非凸包多边形(例如星星)它可以包含每个点,并且仍然比凸包小。它们的周长会比凸面外壳更长,但面积更小。谢谢,这正是我想要的。通过在google上键入“jarvis march java”或“quick hull java”,我甚至找到了java实现。“最小边界框”是…一个框。不是一般的多边形。其他链接可能很好。不确定“最小边界框”与它有什么关系,考虑到P需要是S.hi的子集,我需要在我的应用程序中实现相同的功能。你能和我分享一下算法吗?我用的是QuickHull。此处参考: