带有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.Delaunay
和scipy.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”发送邮件,并带有主题
带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢