2011-05-02 12 views
5

Dada 4 líneas en 3D (representado como un par de puntos), Quiero encontrar el punto en el espacio que minimiza la suma de las distancias entre este punto y cada línea.punto más cercano a un conjunto de cuatro de las líneas en 3D

Estoy tratando de encontrar una manera de formular esto como un problema de mínimos cuadrados, pero no estoy muy seguro de cómo debería. Actualmente estoy tratando de utilizar la definición de la distancia prevista en: http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html

¿Alguna idea?

+1

se parece más a algo para math.stackexchange.com – fvu

+0

Gracias por la idea, se envió: http: // math.stackexchange.com/questions/36398/point-closest-to-a-set-four-of-lines-in-3d –

Respuesta

1

hice un programa en Mathematica para el cálculo de las coordenadas del punto. El resultado es una gran fórmula algebraica. Lo cargué en ideone para ti.

Aquí está el programa, en caso de tener Mathematica que nos ocupa:

(*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 *) 

RESULT

+0

Hola, enlace ha caducado, ¿puedes subirlo de nuevo? Gracias – elect

Cuestiones relacionadas