Ближайшая точка к N линиям в D-мерном пространстве - PullRequest
1 голос
/ 26 мая 2019

Я хочу вычислить точку / вектор с наименьшим евклидовым расстоянием до заданного набора из N линий (например, заданных точкой и вектором для направления) в D-мерном пространстве (например, по методу наименьших квадратов)

Поскольку я использую Python для своего проекта, мне было интересно, есть ли уже соответствующие реализации для этой общей проблемы в некоторой стандартной библиотеке, такой как numpy, но я не нашел ни одной.

Уже есть связанные вопросы, такие как:

Нахождение центра нескольких линий с использованием метода наименьших квадратов в Python

ближайшая точка пересечения со многими линиями в питоне

Однако в этих вопросах не учитывалось измерение, превышающее 3, и в моем случае я хотел бы адаптировать задачу к измерениям, таким как 100.

Я также нашел этот ресурс для Matlab, который, кажется, не используется так часто, но имеет дело с той же проблемой: https://de.mathworks.com/matlabcentral/fileexchange/59805-line-line-intersection-n-lines-d-space?s_tid=FX_rc1_behav

1 Ответ

0 голосов
/ 27 мая 2019

Если каждая строка с индексом i задана единицей векторного столбца

vi = {
       v1i,
       v2i,
       v3i,
       ...
       vDi
      } 

, указывающей вдоль линии i, и точкой, заданной векторным столбцом

pi = {
       p1i,
       p2i,
       p3i,
       ...
       pDi
      } 

, где i = 1 ... N, то искомая точка x, заданная в виде столбца, определяется уравнением

x = inverse( sum(i=1:N, I - vi * transposed(vi)) ) * sum(i=1:N, (I - vi * transposed(vi)) * pi); 

Здесь I - это D-размерная единичная квадратная матрица.

Если каждая строка задана двумя точками pi и qi, то вы можете вычислить

vi = (qi - pi) / sqrt(transposed(qi - pi) * (qi - pi))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...