Trobeu la distància perpendicular del punt a la línia en 3D?
Find Perpendicular Distance From Point Line 3d
Solució:
Intuïtivament, voleu la distància entre el punt A i el punt de la línia BC més proper a A . I el punt de la línia que busqueu és exactament la projecció d’A sobre la línia. La projecció es pot calcular utilitzant el producte punt (que de vegades s'anomena 'producte de projecció').
Així podeu calcular el vector de direcció $ mathbb {d} $ de la línia $ BC $. Aquesta és la diferència entre $ B $ i $ C $, dividits per la seva distància:
$$ mathbb {d} = (C-B) / || C-B || $$
A continuació, podeu definir un vector de $ B $ a $ A $:
$$ mathbb {v} = A - B $$
Si calculeu el producte punt entre aquest vector i el vector de direcció, obtindreu la distància entre $ B $ i la projecció de $ A $ a $ BC $:
$$ t = mathbb {v} cdot mathbb {d} $$
La projecció real $ P $ de $ A $ en $ BC $ es dóna llavors com
$$ P = B + t cdot mathbb {d} $$
I, finalment, la distància que heu estat buscant és
$$ || P - A || $$
Per descomptat, això es podria escriure en una forma una mica més curta. Té els avantatges de proporcionar-vos exactament el punt més proper de la línia (que pot ser un bon complement per calcular només la distància) i es pot implementar fàcilment. Alguns pseudocodi:
doble computeDistance (vec3 A, vec3 B, vec3 C) {vec3 d = (C - B) / C.distance (B); vec3 v = A - B; doble t = v.dot (d); vec3 P = B + t * d; retorn P.distància (A); }
Si esteu familiaritzat amb diversos productes, podeu obtenir la distància necessària calculant $$ frac {| overrightarrow {BA} times overrightarrow {BC} |} {| overrightarrow {BC} |} $$
Podeu parametritzar la línia (ni tan sols us haureu de preocupar pel fet que sigui un segment):
$$ B-C = langle 0, -2,1 rangle $$així que la línia és$$ langle 1,0,1 rangle + t langle 0, -2,1 rangle $$
Així doncs, per un cert valor de$ t $, anomena-ho$ k $, el vector de$ A $a$ langle 1, -2k, 1 + k rangle $és ortogonal a$ langle 0, -2,1 rangle $. Així
$$ ( langle 1, -2k, 1 + k rangle- langle 4,2,1 rangle) cdot langle 0, -2,1 rangle = 0 $$
$$ langle -3, -2k-2, k rangle cdot langle 0, -2.1 rangle = 0 $$
$$ 4k + 4 + k = 0 $$
$$ k = - frac {4} {5} $$
així que ara hauríeu de ser capaços de trobar el punt.