问题标签 [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.
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
:
DT
计算点云的 Delaunay 三角剖分- 查找 alpha 复形:搜索 Delaunay 三角剖分中的所有单纯形,并且 (a) 如果单纯形周围的任何球为空且半径小于
alpha
(称为“alpha 测试”),然后将其添加到 alpha 复形- 阿尔法复合体的边界是阿尔法形状
代码
输出
点云:
阿尔法形状:
2021 年 9 月 9 日更新
根据@akaszynski,问题确实似乎是独特点和负面点的结合。他通过以下方式解决了这个问题:
但是,如果有人可以进行更深入的调查以确定问题的原因,那将有所帮助。
2021 年 9 月 9 日更新 #2
根据@AndrasDeak,两者都pyvista
支持VTK
创建 2d 和 3d alpha 形状。该pyvista
函数在底层delaunay_3d
使用vtkDelaunay3D
,它接受一个alpha
参数。
(参见vtkDelaunay3D 文档)
python - 是否有任何命令可以为我提供基于多点几何的 alpha 形状?
今天是个好日子,
我有一个多点作为几何图形的集群地理数据。我能够使用 geopanda 的方法创建凸包convex_hull
。但不知何故,我找不到用于创建 alpha 形状的类似命令。或者一些东西会给我一个给定集群中所有点的紧密边界。
出于演示目的,我将在此处提供代码。该代码从 Open Street Map 下载样本数据,使用 HDBSCAN 方法对点进行聚类,然后为每个聚类创建凸包。
主要问题是关于最后一个命令。我想以类似的方式创建一个 alpha 形状(带有 predifend alpha 参数),我将拥有多边形,就像我在 convex_hull 的情况下一样。
有什么建议么?
cgal - 提取(最佳)2D alpha 形状的边界顶点/多边形
我有兴趣仅提取 2D alpha 形状的特定 alpha 值的外部边界多边形(按排序顺序)。在创建 alpha 形状以确保最佳 alpha 形状不包含任何孔(即只有一个外部边界)时是否有一个选项,或者有一种从常规 alpha 形状顶点提取外部边界的简单方法?感谢您的任何提示。
这个问题与上一个问题有关:Get 2d alpha shape boundary vertices from set of points
python - 在 jupyter notebook 中使用 alphahull >0 显示 3d 网格的问题
我用 AlphaNull 尝试了以下示例3D Mesh 示例来测试 alphahull,但我的 jupyter 笔记本只显示空白。
当我设置alphahull=5
时,显示为空白:
但是当我设置时alphahull = 0
,它可以工作:
当我设置时alphahull = -1
,它可以工作:
为什么会发生这种情况,我该如何解决?预先感谢您的帮助。
python - 获取线穿过多边形的点的坐标
我想找到一条线与多边形相交的点。我使用来自这个线程的凹轮廓计算获得了这个多边形。
到目前为止,我尝试定义一条线:
但inters.xy
返回一个 NotImplemented 错误,所以我不确定如何获取线与多边形相交的点的坐标。