SciPy - Spatial

scipy.spatial 包可以利用 Qhull 库来计算一组点的三角剖分、Voronoi 图和凸包。此外,它还包含用于最近邻点查询的 KDTree 实现 和用于各种度量的距离计算的实用程序。

Delaunay 三角剖分

让我们了解 Delaunay 三角剖分是什么以及它们在 SciPy 中的使用方式。

什么是 Delaunay 三角剖分?

在数学和计算几何中,对于平面中给定的离散点集 P 的 Delaunay 三角剖分是三角剖分 DT(P),使得 P 中的任何点都不在 DT(P) 中任何三角形的外接圆内。

我们可以通过 SciPy 进行相同的计算。让我们考虑以下示例。

from scipy.spatial import Delaunay
points = np.array([[0, 4], [2, 1.1], [1, 3], [1, 2]])
tri = Delaunay(points)
import matplotlib.pyplot as plt
plt.triplot(points[:,0], points[:,1], tri.simplices.copy())
plt.plot(points[:,0], points[:,1], 'o')
plt.show()

上述程序将生成以下输出。

Delaunay Triangulations

共面点

让我们了解共面点是什么以及它们在 SciPy 中的用法。

什么是共面点?

共面点是位于同一平面上的三个或多个点。回想一下,平面是一个平坦的表面,它向所有方向无限延伸。它在数学教科书中通常显示为四边形。

让我们看看如何使用 SciPy 找到它。让我们考虑以下示例。

from scipy.spatial import Delaunay
points = np.array([[0, 0], [0, 1], [1, 0], [1, 1], [1, 1]])
tri = Delaunay(points)
print tri.coplanar

上述程序将生成以下输出。

array([[4, 0, 3]], dtype = int32)

这意味着点 4 位于三角形 0 和顶点 3 附近,但不包含在三角剖分中。

凸包

让我们了解什么是凸包以及它们在 SciPy 中的使用方式。

什么是凸包?

在数学中,欧几里得平面或欧几里得空间中(或更一般地,在实数上的仿射空间中)的一组点 X 的凸包凸包络是包含 X 的最小凸集

让我们考虑以下示例以详细了解它。

from scipy.spatial import ConvexHull
points = np.random.rand(10, 2) # 2-D 中的 30 个随机点
hull = ConvexHull(points)
import matplotlib.pyplot as plt
plt.plot(points[:,0], points[:,1], 'o')
for simplex in hull.simplices:
plt.plot(points[simplex,0], points[simplex,1], 'k-')
plt.show()

上述程序将生成以下输出。

Convex Hulls