【问题标题】:How do you generate the non-convex hull from a series of points?如何从一系列点生成非凸包?
【发布时间】:2010-09-01 17:06:44
【问题描述】:

我目前正在尝试构建设备在运行期间所覆盖的区域。 此过程的第一步似乎是构建覆盖区域的多边形。 由于图案不是标准形状,凸包通过跳到可能的最大覆盖区域夸大了覆盖区域。

我发现一篇论文似乎涵盖了非凸包生成的概念,但没有讨论如何在高级语言中实现这一点。 http://www.geosensor.net/papers/duckham08.PR.pdf

有没有人见过一个直接的算法来构造一个非凸壳或凹壳,或者任何 python 代码来实现相同的结果?

我尝试了主要是 qhull 的凸包,边缘大小有限,成功率有限。 我还注意到一些无法分发的许可库,所以不幸的是,这不在讨论范围内。 有更好的想法或食谱吗?

【问题讨论】:

  • 问题是否明确?您想要任何覆盖这些点的非凸包吗?还是有一些额外的限制?考虑形成一个等边三角形的三个点和中心的第四个点。有(至少)三个可能的非凸包包围这些点。
  • 哇,所有这些不同的 stackexchange 网站确实很好地将问题转移到可以回答问题的人的视野之外。 :(

标签: python math geometry gis computational-geometry


【解决方案1】:

您可以尝试研究 Alpha 形状。 CGAL 库可以计算它们。

编辑:我看到您链接的论文引用了 alpha 形状,并且还有一个算法列表。这对你来说还不够高吗?由于您将 python 列为标签,我确信 Python 中有 Delaunay 三角剖分库,我认为这是实现算法最难的部分;您只需要确保可以修改生成的三角测量输出。边界查询函数大概可以用关联数组来实现。

【讨论】:

  • 不幸的是,您提到的 CGAL 的 python 绑定不再与最新版本的 boost-python 和 CGAL 一起编译。看来该项目不再受到真正的支持。还有其他 python 替代品吗?
猜你喜欢
  • 2023-03-31
  • 2016-12-21
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-01-08
  • 2016-07-14
  • 2018-11-26
相关资源
最近更新 更多