Пакет scipy.spatial может вычислять триангуляции, диаграммы Вороного и выпуклые оболочки из набора точек, используя библиотеку Qhull . Кроме того, он содержит реализации KDTree для запросов точек ближайших соседей и утилиты для вычислений расстояния в различных метриках.
Триангуляции Делоне
Давайте разберемся, что такое триангуляции Делоне и как они используются в SciPy.
Что такое триангуляции Делоне?
В математике и вычислительной геометрии триангуляция Делоне для заданного набора P дискретных точек на плоскости является триангуляцией 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()
Вышеуказанная программа сгенерирует следующий вывод.