Периметр 2D выпуклой оболочки в Python - PullRequest
0 голосов
/ 19 сентября 2018

Как я могу рассчитать периметр выпуклой оболочки в Python?Я знаю, SciPy имеет параметр area для выпуклых оболочек;Однако мне нужно perimeter.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете перебирать точки выпуклой оболочки и вычислять расстояние между последовательными точками:

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.

Далее

  1. Что такое область ввыпуклая выпуклая оболочка
...