问题标签 [alpha-shape]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
291 浏览

python - 3D 中的 Alpha 形状 - 跟进

问题


我正在尝试为 python 中的 3D 点云的 alpha 形状实现 Edelsbrunner 算法,如这篇 SO post中所述。但是,我无法绘制结果。我的球体有一半看起来不错,而另一半则乱码。

我怀疑这可能与我有负坐标的事实有关,但我不确定。


定义


我正在添加这些,以便程序员可以做出贡献而不会被数学所困。这些是简化的定义,并不意味着精确(请随意跳过这部分;有关更多信息,请参阅Alpha 形状离散微分几何简介):

  • Delaunay 三角剖分: 对于 2D 点集,将点细分为三角形(即“三角剖分”),其中每个三角形的外接圆(即“外接圆”)不包含集合中的其他点。对于 3D 点,将“triangle”替换为“tetrahedron”,将“circumcircle”替换为“circumsphere”。

  • 仿射独立: 点的集合,p0, ..., pk使得所有向量vi := pi-p0都是线性独立的(即在 2D 中不共线,在 3D 中不共面);也称为“一般位置点”

  • k-单纯形: k+1 个仿射独立点的凸包;我们称这些点为顶点。

0-单纯形 = 点(由 0+1 = 1 个点组成)
1-单纯形 = 线(由 1+1 = 2 个点组成)
2-单纯形 = 三角形(由 2+1 = 3 个点组成)
3-单纯形 = 四面体(由 3+1 = 4 分组成)

  • 面: 任何单纯形,其顶点是另一个单纯形的顶点的子集;即“单纯形的一部分”

  • (几何)单纯复形: 单纯形的集合,其中(1)两个单纯形的交点是单纯形,(2)单纯形的每个面都在复合形中;即“一堆单纯形”

  • alpha-exposed: 点集中的单纯形,其中半径为 alpha 通过其顶点的圆 (2D) 或球 (3D) 不包含点集中的任何其他点

  • alpha 形状: 点集的所有 alpha 暴露单纯形的边界

算法


Edelsbrunner 算法如下:

给定一个点云pts

  1. DT计算点云的 Delaunay 三角剖分
  2. 查找 alpha 复形:搜索 Delaunay 三角剖分中的所有单纯形,并且 (a) 如果单纯形周围的任何球为空且半径小于alpha(称为“alpha 测试”),然后将其添加到 alpha 复形
  3. 阿尔法复合体的边界是阿尔法形状

代码


输出

点云:

点云

阿尔法形状:

阿尔法形状

2021 年 9 月 9 日更新

根据@akaszynski,问题确实似乎是独特点和负面点的结合。他通过以下方式解决了这个问题:

固定球体

但是,如果有人可以进行更深入的调查以确定问题的原因,那将有所帮助。

2021 年 9 月 9 日更新 #2

根据@AndrasDeak,两者都pyvista支持VTK创建 2d 和 3d alpha 形状。该pyvista函数在底层delaunay_3d使用vtkDelaunay3D,它接受一个alpha参数。

(参见vtkDelaunay3D 文档

0 投票
0 回答
109 浏览

python - 是否有任何命令可以为我提供基于多点几何的 alpha 形状?

今天是个好日子,

我有一个多点作为几何图形的集群地理数据。我能够使用 geopanda 的方法创建凸包convex_hull。但不知何故,我找不到用于创建 alpha 形状的类似命令。或者一些东西会给我一个给定集群中所有点的紧密边界。

出于演示目的,我将在此处提供代码。该代码从 Open Street Map 下载样本数据,使用 HDBSCAN 方法对点进行聚类,然后为每个聚类创建凸包。

主要问题是关于最后一个命令。我想以类似的方式创建一个 alpha 形状(带有 predifend alpha 参数),我将拥有多边形,就像我在 convex_hull 的情况下一样。

有什么建议么?

0 投票
0 回答
16 浏览

cgal - 提取(最佳)2D alpha 形状的边界顶点/多边形

我有兴趣仅提取 2D alpha 形状的特定 alpha 值的外部边界多边形(按排序顺序)。在创建 alpha 形状以确保最佳 alpha 形状不包含任何孔(即只有一个外部边界)时是否有一个选项,或者有一种从常规 alpha 形状顶点提取外部边界的简单方法?感谢您的任何提示。

这个问题与上一个问题有关:Get 2d alpha shape boundary vertices from set of points

0 投票
1 回答
33 浏览

python - 在 jupyter notebook 中使用 alphahull >0 显示 3d 网格的问题

我用 AlphaNull 尝试了以下示例3D Mesh 示例来测试 alphahull,但我的 jupyter 笔记本只显示空白。

当我设置alphahull=5时,显示为空白: alphahull=5 的结果

但是当我设置时alphahull = 0,它可以工作: alphahull = 0 的结果

当我设置时alphahull = -1,它可以工作: alphahull 的结果 = -1

为什么会发生这种情况,我该如何解决?预先感谢您的帮助。

0 投票
2 回答
68 浏览

python - 获取线穿过多边形的点的坐标

我想找到一条线与多边形相交的点。我使用来自这个线程的凹轮廓计算获得了这个多边形。

在此处输入图像描述

到目前为止,我尝试定义一条线:

inters.xy返回一个 NotImplemented 错误,所以我不确定如何获取线与多边形相交的点的坐标。