Точка, ближайшая к набору четырех линий в 3D - PullRequest
5 голосов
/ 02 мая 2011

Учитывая 4 линии в 3D (представленные в виде пары точек), я хочу найти точку в пространстве, которая минимизирует сумму расстояний между этой точкой и каждой линией.

Я пытаюсь найти способ сформулировать это как проблему наименьших квадратов, но я не совсем уверен, как мне следует это делать. В настоящее время я пытаюсь использовать определение расстояния, представленное в: http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html

Есть идеи?

1 Ответ

1 голос
/ 18 июня 2011

Я сделал программу в Mathematica для вычисления координат точек. Результатом является большая алгебраическая формула. Я загрузил его в ideone для вас.

Вот программа, если у вас есть Mathematica под рукой:

(*Load package*)
Needs["VectorAnalysis`"]
(*Define four lines, by specifying 2 points in each one*)
Table[p[i, j] = {x[i, j], y[i, j], z[i, j]}, {i, 4}, {j, 2}];

(*Define the target point*)
p0 = {x0, y0, z0};

(*Define a Norm function // using Std norm squared here*)
norm[a_] := a[[1]]^2 + a[[2]]^2 + a[[3]]^2

(*Define a function for the distance from line i to point v
used http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html (11) *)
d[i_, v_] :=  norm[Cross[(v - p[i, 1]), (v - p[i, 2])]]/norm[p[i, 2] - p[i, 1]]

(*Define a function for the sum of distances*)
dt[p_] := Sum[d[i, p], {i, 4}]

(*Now take the gradient, and Solve for Gradient == 0*)
s = Solve[Grad[dt[p0], Cartesian[x0, y0, z0]] == 0, {x0, y0, z0}]

(* Result tooooo long. Here you have it for downloading
http://ideone.com/XwbJu *)  

РЕЗУЛЬТАТ

...