Python 中二维凸包的周长

Perimeter of a 2D convex hull in Python

如何计算Python中凸包的周长?我知道 SciPy 有凸包的 area 参数;但是,我需要 perimeter.

您可以迭代凸包的点并计算连续点之间的距离:

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

注意:您还需要添加对(last, first)

更新

作为替代方案,假设数据是二维的,您可以使用 hull.area。即上述方法返回的值等于属性区域的值。如果要真正的区域,需要查询hull.volume.

进一步