% La funzione dist_punto_retta permette di calcolare la distanza tra un
% punto ed una retta nello spazio

function [dist] = dist_punto_retta(P, retta)
% INGRESSI:
% P: contiene le coordinate x, y e z del punto nello spazio
% retta: contiene i parametri a, b, c e d dei due piano che intersecati
% danno la retta

% USCITE:
% dist: la funzione restituisce la distanza tra punto e retta nello spazio

% inizializzazioni
punti = zeros(2,3);

% cerchiamo due punti passanti per la retta in ingresso per determinare la
% retta in forma parametrica

% prima retta
punti(1,1) = 0;

punti(1,3) = (retta(2,2)*retta(1,4) - retta(2,4)*retta(1,2))/(retta(2,3)*retta(1,2) - retta(2,2)*retta(1,3));

punti(1,2) = -(retta(1,3)*punti(1,3) + retta(1,4))/retta(1,2);

% seconda retta
punti(2,3) = 0;

punti(2,2) = (retta(2,1)*retta(1,4) - retta(1,1)*retta(2,4))/(retta(1,1)*retta(2,2) - retta(2,1)*retta(1,2));

punti(2,1) = -(retta(1,2)*punti(2,2) + retta(1,4))/retta(1,1);

% parametri della retta parametrica
m1 = punti(2,1) - punti(1,1);
m2 = punti(2,2) - punti(1,2);
m3 = punti(2,3) - punti(1,3);

% distanza punto retta nello spazio
dist = sqrt((punti(1,1)-P(1))^2 + (punti(1,2)-P(2))^2 + (punti(1,3)-P(3))^2-(((punti(1,1)-P(1))*m1 + (punti(1,2)-P(2))*m2 + (punti(1,3)-P(3))*m3)/sqrt(m1^2+m2^2+m3^2))^2);


