Пересечение трехмерных векторов с использованием метода наименьших квадратов

Я пытался получить точку пересечения некоторых 3D-линий. Линии представлены в виде

Строка: с + т*р. Линии на самом деле не пересекаются, поэтому я хотел бы получить точку в 3D, чтобы расстояние от этой точки до всех линий было минимальным.

Я нашел решения для поиска пересечения двух линий, но в моем случае это набор линий, например, 5 или более.

Я нашел решение, которое представляет собой расстояние между точкой a и линией l: p+t*r (p — начальная точка, r — вектор направления, t — скалярное значение) как

d(a,l) = (|| r x (p-a) ||)/|| r || =

|| ([r]x/||r||)a - ([r]x/||r||) p ||

решение которого говорит, что второе уравнение является задачей минимизации методом наименьших квадратов вида

|| Ax-b ||

и решение: x = (At A)^-1 * At*b , At - транспонирование A, но я не могу отформатировать его здесь.

Как я могу написать матрицу A и вектор b, если у меня есть несколько строк?


person Mohamed Selim    schedule 30.01.2013    source источник


Ответы (1)


Здесь я использовал функцию MATLAB для пересечения n строк по методу наименьших квадратов и закодировал ее на C++ для своих нужд: линии-в-3D-пространстве/содержание/lineIntersect3D.m" rel="nofollow">http://www.mathworks.com/matlabcentral/fileexchange/37192-intersection-point-of-lines-in-3D-space/ контент/lineIntersect3D.m

Я следил за теорией пересечения n-строк здесь: http://en.wikipedia.org/wiki/Line-line_intersection

Работает отлично!

person Dan    schedule 17.07.2013