是否有一种算法可以减少多边形的边,同时将所有点保留在多边形内?
Is there an algorithm to reduce the sides of a Polygon while keeping all Points within the Polygon?
我正在尝试将具有 4 个以上顶点的多边形减少为具有 4 个边的多边形,以便稍后执行透视变换。我需要找到包含原始多边形所有点的 4 边的多边形。基本上我想要的是这样的:
这里真正的问题是多边形只能变大...如果使用多边形近似算法变小,它就不再有用了...
编辑:
我需要最优解,这意味着生成的 4 边形的面积尽可能小!
编辑2:
也可以使用凸包算法,我可以在其中确定生成的多边形必须具有的边数!
最简单的解决方案是采用多边形的边界框、由顶点 x 值的最小值和最大值以及 y 值的最小值和最大值定义的矩形。
如果您需要面积较小的 4 顶点多边形,一个想法可能是:
- 获取多边形的凸包。
- Select 删除一侧,并将其相邻边延伸至相交点。只有当他们真的在删除的那一边的最后相遇时才这样做。也许你想select这次删除添加到多边形的最小面积(就是被删除的边和新的交点形成的三角形)所要删除的边。
- 重复直到只剩下 4 个边。
我正在尝试将具有 4 个以上顶点的多边形减少为具有 4 个边的多边形,以便稍后执行透视变换。我需要找到包含原始多边形所有点的 4 边的多边形。基本上我想要的是这样的:
这里真正的问题是多边形只能变大...如果使用多边形近似算法变小,它就不再有用了...
编辑: 我需要最优解,这意味着生成的 4 边形的面积尽可能小!
编辑2: 也可以使用凸包算法,我可以在其中确定生成的多边形必须具有的边数!
最简单的解决方案是采用多边形的边界框、由顶点 x 值的最小值和最大值以及 y 值的最小值和最大值定义的矩形。
如果您需要面积较小的 4 顶点多边形,一个想法可能是:
- 获取多边形的凸包。
- Select 删除一侧,并将其相邻边延伸至相交点。只有当他们真的在删除的那一边的最后相遇时才这样做。也许你想select这次删除添加到多边形的最小面积(就是被删除的边和新的交点形成的三角形)所要删除的边。
- 重复直到只剩下 4 个边。