有一个带有n个顶点的简单多边形P1,n很小,比方说8.这个多边形应代表某些2D点的周长。
接下来,我们有另一个多边形,我们称之为P2,也有最大顶点数n。 P2接近P1,因此绘制一个新的多边形P3是有意义的,它将同时描述P1和P2的区域。
我正在寻找选择新多边形P3的点的算法。我想描述(仍然,有n点!)尽可能好的P1 + P2的形状:用于创建仍然在新多边形P3内的多边形的点的数量应最大化,但是P3尽可能小。
扩展多边形的过程将在我的应用程序中重复调用。
答案 0 :(得分:2)
如果我正确地阅读这个问题,那是不可能的。考虑一个“半圆”,由沿曲线的N个点定义,而在直边上没有。设P1和P2为两个这样的半圆,它们的直边彼此相对:(| |)。显然,唯一包含它们的多边形都包含所有2N点。
更简单的问题(引入一个新顶点并选择一个旧顶点逐出)也是不可能的:考虑一个三角形,以及一个靠近边缘中间的新点。
如果我们放弃了内部任何一个都不会丢失的要求,那么问题就可以解决,但并不完美。我建议您尝试其中一些,看看哪个套房最合适。
答案 1 :(得分:1)
听起来你正试图找到一组具有可接受的点密度的多边形。你考虑过构建一系列convex hulls吗?向外增长,每次添加点时都会构建新的凸包。找到新船体的密度。如果不可接受,请删除该点并选择其他点。达到目标区域或总点数时停止。
这也可以反过来应用。您可以使用初始多边形P1和P2来种植凸包,然后考虑扔掉一个点并计算新的密度。最有用的去除点是最大化密度增加的点。重复直到满意为止。
简单的 O(n log n) convex hull algorithms存在于两个维度。 Qhull是一个不错的C实现。