Geometry 使用新数据集将n顶点多边形展开为n顶点多边形

Geometry 使用新数据集将n顶点多边形展开为n顶点多边形,geometry,2d,polygon,Geometry,2d,Polygon,有一个简单的多边形P1有n个顶点,n很小,比如说8。该多边形应表示一组2D点的周长 接下来,我们有另一个多边形,我们称之为P2,也有最大顶点数n。P2接近P1,因此有必要绘制一个新多边形P3,它将同时描述P1和P2的面积 我正在寻找选择新多边形P3点的算法。我想尽可能好地描述(仍然是n个点!)P1+P2的形状:用于创建仍在新多边形P3内的多边形的点的数量应最大化,但P3的面积应尽可能小 扩展多边形的过程将在我的应用程序中反复调用。如果我正确阅读了这个问题,这是不可能的。考虑一个“半圆”,定义为沿

有一个简单的多边形P1有n个顶点,n很小,比如说8。该多边形应表示一组2D点的周长

接下来,我们有另一个多边形,我们称之为P2,也有最大顶点数n。P2接近P1,因此有必要绘制一个新多边形P3,它将同时描述P1和P2的面积

我正在寻找选择新多边形P3点的算法。我想尽可能好地描述(仍然是n个点!)P1+P2的形状:用于创建仍在新多边形P3内的多边形的点的数量应最大化,但P3的面积应尽可能小


扩展多边形的过程将在我的应用程序中反复调用。

如果我正确阅读了这个问题,这是不可能的。考虑一个“半圆”,定义为沿着曲线的N点,而在直线边缘没有。设P1和P2是两个这样的半圆,它们的直边彼此面对,如下所示:(| |)。显然,包含这两个点的唯一多边形由所有2N个点组成

更简单的问题(引入一个新的顶点并选择一个旧的顶点来驱逐)也是不可能的:考虑一个三角形,和一个边缘附近的新点。< /P> 如果我们放弃任何内部都不能丢失的要求,那么问题就可以解决,但不是完美的。我建议你试试这些,看看你最喜欢哪一套

  • 只需将P1和P2组合成一个2N多边形,然后消除每个其他顶点(d.h.保留顶点2、4、6…)。粗糙,但也许足够好。
  • 将两个最近的邻居合并为一个。重复,直到你只剩下N个。
  • 消除“最直”的顶点,直到只剩下N个。
  • 从2N多边形开始,然后通过取其两条边的叉积来测量每个顶点对面积的贡献。如果为正,则该顶点是凸的,并“保护”大部分内部。如果为负数,则这是一个“排除”大部分外部的凹顶点。现在消除最不重要的顶点。请注意,这不是一个完美的方法,因为消除两个邻居可能会造成比分数显示的更大的伤害。
听起来你在试图找到一组点密度可接受的多边形。您是否考虑过构建一系列的应用程序?向外扩展集合,每次添加点时构造新的凸包。找到新船体的密度。如果不可接受,请删除该点并选择其他点。到达目标区域或总点数时停止

这也可以反过来应用。你可以使用你的初始多边形P1和P2来播种凸包,然后考虑扔掉一个点并计算新的密度。要去除的最有用的一点是最大限度地增加密度。重复,直到满意为止


对于二维,存在简单的O(nlogn)。是一个很好的C实现。

这个问题还不清楚。P3的内部必须包含P1和P2的内部吗?P3的所有顶点都必须是P1或P2的顶点吗?P1和P2可以重叠吗?对不起。是的,P1和P2的内部用P3描述。是的,P1和P2是重叠的,或者至少是靠近地势的区域。为了构建P3,我们可以使用P1和P2的任何顶点,但不能再设置“n”(描述的大小应保持不变)。因此,问题是从2组n点中选择1组n点,有序(因此,我们可以绘制一个多边形,检查是否有其他点属于它…),因此新的n点最好地将两个原始形状的总和组合在一起。更简单的问题陈述:我们有带n个线的多边形P,有一个新的顶点V_new。我们想把它包括在P中。P的n个顶点中的哪一个应该从P中逐出?谢谢。你的问题是对的。我知道,具有N个顶点的新多边形将不是完美的(不会包括P1和P2中的所有点)。我可以选择占用太多的面积还是不够。我只是想把不精确性保持得尽可能小。我喜欢你的想法,我会考虑的。重要的是,这是一个新问题,尚未解决。否则,我将采用现有的解决方案。我的问题的好处是,我为其创建多边形的点集以某种方式呈规则分布。我们可以将这些点视为稀疏图的顶点,其中边的长度是有限的。事实上,它们代表了无线电信网络。信息交换也只发生在图中的邻居之间。当我对不同保单的(覆盖)效率有了结果时,我会在这里报告。我的形状不能是凸面的,例如,它可以看起来像一个肾脏。但是,扔掉点数的想法是可行的,因为我最多只能得到2n个点数。目标是通过使用新多边形P3作为分类器,在平面上的某个点属于区域P1+P2时,同时最大化分类精度P和召回率R。我不明白你关于密度的评论。谢谢你的回答。@Joanna:所谓密度,我只是指每单位空间面积上的点数。我同意你关于肾脏形状的观点。这里有一些相关的问题可能会对您有所帮助。参见例如@ire\ux:引用链接中的凹面外壳算法就是我所需要的。Perfect将给出一个固定数量的点,否则我将不得不在每次迭代中修剪结果。你好,谢谢!