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

Как я могу вычислить eccentricity 2D выпуклой оболочки в Python?

Эксцентриситет: параметр эллипса (или замкнутой формы), указывающий его отклонение от округлости, значение которого находится в диапазоне от 0 (круг) до 1 (линия).

1 Ответ

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

Ну, для тех, кто все еще хотел бы увидеть ответ на этот вопрос: если мы предположим, что замкнутая форма является эллипсом или похожа на эллипс, eccentricity определяется как sqrt(square(major_axis_length/2)-square(minor_axis_length/2)), где большая и малая осипоказаны на рисунке.enter image description here

Конечные точки осей принимаются как минимальные и максимальные значения точек вдоль каждой оси.С 4 примерами географических точек (это также могут быть декартовы координаты), мы можем написать что-то вроде этого:

import numpy as np
from scipy.spatial.distance import euclidean

points = np.array([[50.6636778,5.0939791], [50.7674881,5.4663611], [50.94594, 5.48977], [51.0380754,5.4012648]])

small_latwise = np.min(points[points[:, 0] == np.min(points[:, 0])], 0)
small_lonwise = np.min(points[points[:, 1] == np.min(points[:, 1])], 0)
big_latwise = np.max(points[points[:, 0] == np.max(points[:, 0])], 0)
big_lonwise = np.max(points[points[:, 1] == np.max(points[:, 1])], 0)
distance_lat = euclidean(big_latwise, small_latwise)
distance_lon = euclidean(big_lonwise, small_lonwise)
if distance_lat >= distance_lon:
    major_axis_length = distance_lat
    minor_axis_length = distance_lon
else:
    major_axis_length = distance_lon
    minor_axis_length = distance_lat
a = major_axis_length/2
b = minor_axis_length/2
ecc = np.sqrt(np.square(a)-np.square(b))/a
print(ecc)

, что дает 0.0854194406287

...