我有一组2D点,没有组织,我想找到这个集合的“轮廓”(不是凸包)。我不能使用alpha形状,因为我有一个速度目标(在普通计算机上不到10毫秒)。 我的第一种方法是计算网格并找到轮廓正方形(正方形,其中空方块作为邻居)。所以我认为我有效地缩减了我的点数(大致从22000到3000)。但是我仍然需要改进这个新的设置。
我的问题是:如何在绿点中找到真实的轮廓点?
答案 0 :(得分:1)
经过一个充满反思的周末之后,我可能找到了一个方便的解决方案。
所以我们需要一个网格,我们需要用我们的点填充它,这里没有困难。
我们必须决定哪些方块被视为“轮廓”。我们的标准是:至少有一个空邻居和至少3个非空邻居。
我们缺乏连接信息。所以我们选择一个“轮廓”方形,其为2“轮廓”邻居或更少。然后我们挑选一个邻居。由此,我们可以开始扩张。我们只围绕当前的方块,找到下一个“Contour”方块,知道之前的“Contour”方块。我们的轮廓标准使我们无法走入死胡同。
我们现在有连接方块的向量,通常如果我们的形状没有洞,只有一个连接方块的向量!
现在,对于每个方格,我们需要找到轮廓的最佳点。我们选择离我们飞机重心更远的那个。它适用于大多数形状。另一种技术是计算所选方形的空邻居的重心并选择最近的点。
红点是绿色的轮廓。使用的技术是飞机重心一号。
对于一组28000点,此技术需要8毫秒。 CGAL的Alpha形状平均需要125毫秒才能获得28000点。
PS:我希望我说清楚,英语不是我的母语:s答案 1 :(得分:0)
你真的应该使用alpha形状。也许只使用绿点作为alpha alpha算法的输入。