SciPy 教程

Scipy空间


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

Delaunay 三角

下面来了解 Delaunay Triangulations 是什么以及如何在 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()

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

共面点

下面了解共面点是什么以及它们如何在 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) # 30 random points in 2-D
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()

执行上面示例代码得到以下结果 -