Вы можете перебирать точки выпуклой оболочки и вычислять расстояние между последовательными точками:
import numpy as np
from scipy.spatial.qhull import ConvexHull
from scipy.spatial.distance import euclidean
points = np.random.rand(30, 2)
hull = ConvexHull(points)
vertices = hull.vertices.tolist() + [hull.vertices[0]]
perimeter = np.sum([euclidean(x, y) for x, y in zip(points[vertices], points[vertices][1:])])
print(perimeter)
Выход
3.11
Примечание: Вам также необходимо добавить пару (последнюю, первую)
ОБНОВЛЕНИЕ
В качестве альтернативы, учитывая, что данные 2D, вы можете использовать hull.area
.То есть значение, возвращаемое в вышеуказанном методе, равно значению свойства area.Если вам нужна реальная область , вам нужно запросить hull.volume
.
Далее
- Что такое область ввыпуклая выпуклая оболочка