Geometry 查找二维无组织点云的轮廓

Geometry 查找二维无组织点云的轮廓,geometry,computational-geometry,Geometry,Computational Geometry,我有一组无组织的2D点,我想找到这组点的“轮廓”(不是凸包)。我不能使用alpha形状,因为我有一个速度目标(在一台普通计算机上小于10毫秒)。 我的第一种方法是计算一个网格并找到轮廓正方形(有一个空正方形作为邻居的正方形)。所以我认为我有效地减少了我的分数(从22000到3000)。但我仍然需要改进这个新的设置 我的问题是:如何在我的绿点中找到真正的轮廓点?你真的应该使用alpha形状。可能只使用绿点作为alpha-alpha算法的输入。经过一个充满反射的周末,我可能已经找到了一个方便的解决

我有一组无组织的2D点,我想找到这组点的“轮廓”(不是凸包)。我不能使用alpha形状,因为我有一个速度目标(在一台普通计算机上小于10毫秒)。 我的第一种方法是计算一个网格并找到轮廓正方形(有一个空正方形作为邻居的正方形)。所以我认为我有效地减少了我的分数(从22000到3000)。但我仍然需要改进这个新的设置


我的问题是:如何在我的绿点中找到真正的轮廓点?

你真的应该使用alpha形状。可能只使用绿点作为alpha-alpha算法的输入。

经过一个充满反射的周末,我可能已经找到了一个方便的解决方案

所以我们需要一个网格,我们需要用我们的点填充它,这里没有困难

我们必须决定哪些正方形被视为“轮廓”。我们的标准是:至少一个空邻居和至少三个非空邻居

我们缺少连接信息。因此,我们选择一个“轮廓”正方形作为2个或更少的“轮廓”邻居。然后我们选一个邻居。从那以后,我们就可以开始扩张了。我们只需围绕当前正方形旋转,找到下一个“轮廓”正方形,知道之前的“轮廓”正方形。我们的轮廓标准防止我们陷入死胡同

我们现在有了连通正方形的向量,通常如果我们的形状没有孔,只有一个连通正方形的向量

现在,对于每个正方形,我们需要找到轮廓的最佳点。我们选择离飞机重心较远的那个。它适用于大多数形状。另一种方法是计算所选正方形的空邻域的重心并选择最近的点

红色点是绿色点的轮廓。使用的技术是平面重心法

对于一组28000个点,这种技术需要8毫秒。CGAL的阿尔法形状对于28000个点平均需要125毫秒


PS:我希望我说清楚,英语不是我的母语:s

即使是2500分,CGAL的alpha形状计算时间也是15毫秒。加上寻找绿点的5毫秒,计算时间为20毫秒。我找到了一个解决方案(我正在打字),它需要3毫秒,并且输出效果很好。@Xerto:要么你的机器速度很慢,要么你使用CGAL alpha图形很糟糕。在我的笔记本电脑上,25000点的运行时间大约是5ms,除非你指定的alpha值太大,并且返回所有边(在这种情况下,大约是20ms,25000点)。我的程序是一个Core 2 Duo,更多的软件是为无人机设计的,所以我们的规格很低(可能是Atom)。对于CGAL的字母形状,我使用文档中给出的示例。