Вычисление площади выпуклой оболочки в сципе - PullRequest
0 голосов
/ 20 октября 2019

Я хотел вычислить выпуклую оболочку для пары точек на плоскости, используя scipy.

Вот мой код:

import numpy as np
from scipy.spatial import ConvexHull

points = np.array([[10, 10], [30, 10], [30, 20], [10, 20]])
hull = ConvexHull(points)
print(hull.vertices, hull.area)

Он печатает: [0 1 2 3] 60.0

Итак, возвращается периметр, а не область (я проверил другой пример, такое же поведение). Это ошибка? Python 3.7.4 (64-разрядная версия), scipy 1.3.1.

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Полагаю, hull.area относится к периметру в 1D и к площади в 2D. Если вы хотите, чтобы область, ограниченная 1-мерным корпусом, или объем, ограниченный 2-мерным корпусом, вместо этого вызовите hull.volume.

1 голос
/ 20 октября 2019

Определение выпуклой оболочки основано на периметре, а не на площади:

В математике выпуклая оболочка или выпуклая оболочка или выпуклое замыкание множества Xточек в евклидовой плоскости или в евклидовом пространстве (или, в более общем случае, в аффинном пространстве над вещественными веществами) - это наименьшее выпуклое множество, содержащее X. Например, когда X является ограниченным подмножеством плоскости, выпуклая оболочкаможно представить как форму, заключенную в резинку, растянутую вокруг X.

Так что это ожидаемый результат. Хотя мне кажется, что вы напечатали как точки периметра ([0 1 2 3]), так и площадь (60.0)?

...