Я использую класс scipy ConvexHull для построения выпуклого корпус за набор очков. Меня интересует способ вычисления минимального расстояния новой точки P от выпуклой оболочки.
С помощью Интернета и небольшой настройки я придумал эту формулу для вычисления расстояния от точки P или набора точек точек до выпуклой оболочки. грани:
np.max(np.dot(self.equations[:, :-1], points.T).T + self.equations[:, -1], axis=-1)
Для выпуклой оболочки в 2D приведенное выше уравнение приведет к следующему графику:
Как видите, результат довольно хороший и правильный для точек внутри выпуклой оболочки (расстояние здесь отрицательное, и его необходимо умножить на -1). Это также верно для точек, ближайших к фасете, но неверно для точек, ближайших к вершине выпуклой оболочки. (Я отметил эти области пунктирными линиями). Для этих точек правильным минимальным расстоянием было бы минимальное расстояние до вершин выпуклой оболочки.
Как отличить точки, которые наиболее близки к фасету или самые близкие к вершине, чтобы правильно вычислить минимальное расстояние до выпуклой оболочки для точки P или набора точек points em > в n-мерном пространстве (хотя бы в 3D)?