SciPy - Espacial
o scipy.spatial package pode calcular triangulações, diagramas de Voronoi e cascos convexos de um conjunto de pontos, aproveitando o Qhull library. Além disso, contémKDTree implementations para consultas de ponto do vizinho mais próximo e utilitários para cálculos de distância em várias métricas.
Triangulações de Delaunay
Vamos entender o que são triangulações de Delaunay e como elas são usadas no SciPy.
O que são triangulações de Delaunay?
Em matemática e geometria computacional, uma triangulação de Delaunay para um determinado conjunto P de pontos discretos em um plano é uma triangulação DT(P) de modo que nenhum ponto em P está dentro da circunferência de qualquer triângulo em DT (P).
Podemos calcular da mesma forma através do SciPy. Vamos considerar o seguinte exemplo.
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()
O programa acima irá gerar a seguinte saída.
Pontos Coplanares
Vamos entender o que são pontos coplanares e como eles são usados no SciPy.
O que são pontos coplanares?
Os pontos coplanares são três ou mais pontos que se encontram no mesmo plano. Lembre-se de que um plano é uma superfície plana, que se estende sem fim em todas as direções. Geralmente é mostrado nos livros de matemática como uma figura de quatro lados.
Vamos ver como podemos encontrar isso usando SciPy. Vamos considerar o seguinte exemplo.
from scipy.spatial import Delaunay
points = np.array([[0, 0], [0, 1], [1, 0], [1, 1], [1, 1]])
tri = Delaunay(points)
print tri.coplanar
O programa acima irá gerar a seguinte saída.
array([[4, 0, 3]], dtype = int32)
Isso significa que o ponto 4 reside perto do triângulo 0 e do vértice 3, mas não está incluído na triangulação.
Cascos convexos
Vamos entender o que são cascos convexos e como são usados no SciPy.
O que são cascos convexos?
Em matemática, o convex hull ou convex envelope de um conjunto de pontos X no plano euclidiano ou em um espaço euclidiano (ou, mais geralmente, em um espaço afim sobre os reais) é o menor convex set que contém X.
Vamos considerar o seguinte exemplo para entendê-lo em detalhes.
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()
O programa acima irá gerar a seguinte saída.