带有scipy.spatial.Delaunay的Python凸包,如何消除船体内的点?

Posted

技术标签:

【中文标题】带有scipy.spatial.Delaunay的Python凸包,如何消除船体内的点?【英文标题】:Python convex hull with scipy.spatial.Delaunay, how to eleminate points inside the hull? 【发布时间】:2014-03-10 17:38:43 【问题描述】:

我在名为pointsList 的 np.array 中有一个 3D 点列表,值为float

[[1., 2., 10.],
 [2., 0., 1.],
 [3., 6., 9.],
 [1., 1., 1.],
 [2., 2., 2.],
 [10., 0., 10.],
 [0., 10., 5.],
... etc.

此代码对点云进行 Delaunay 三角剖分:

import numpy as np
import scipy.spatial 

tri = scipy.spatial.Delaunay(pointsList) 
# Delaunay triangulation

indices = tri.simplices
# indices of vertices

vertices = points[indices]
# the vertices for each tetrahedron

但是,在三角测量步骤之前,我想从列表中删除凸包 inside 的所有点

一种解决方案是创建一个名为shortlist 的新np.array,并将它们存储在那里。

但是scipy(或任何其他解决方案)中的什么功能可以做到这一点?

我该如何编程这个操作?

谢谢

【问题讨论】:

【参考方案1】:

凸包是 Delaunay 三角剖分的子图。

所以你可能只使用scipy.spatial.ConvexHull(),例如。 g.

from scipy.spatial import ConvexHull
cv = ConvexHull(pointList)

hull_points = cv.vertices
# the vertices of the convex hull

set(range(len(pointList))).difference(ch.vertices)
# the vertices inside the convex hull

比较scipy.spatial.Delaunayscipy.spatial.ConvexHull (2D)

【讨论】:

你是如何绘制这张图片的? @TripShock 这是两张图片。我为 matplotlib 提供了散点数据(散点图​​)和链接顶点的数据(线图)。您可以通过simplices 属性中的索引获取链接的顶点。 @embert 感谢您的回答,但是我如何在执行 ConvexHull 操作之后计算 Delaunay 三角剖分?? @adrienlucca.wordpress.com 为什么要这样做?您可以执行 Delaunay 一次 (scipy.spatial.Delaunay),这样您就可以使用 ConvexHull (scipy.spatial.Delaunay.convex_hull)。

以上是关于带有scipy.spatial.Delaunay的Python凸包,如何消除船体内的点?的主要内容,如果未能解决你的问题,请参考以下文章

具有包裹尺寸的德劳内三角剖分?

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询

带有滚动的 Div 和带有绝对位置的内容

带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢