Samo da se ispravim, pošto sam napravio grešku kod onih sinusa i kosinusa. Treba da stoji:

,

,

i

su koordinate temena duži. Mislim da bi na ovaj način funkcija bila jednostavnija.
Uzgred, zašto pozivaš funkciju za deljenje kad si u startu obezbedio da imenilac ne može biti nula?
U stvari, evo ti funkcija, pa ti vidi (samo da napomenem da je pisana "po suvom", tako da može da bude i grešaka).
Code:
double rastojanje(double x1, double y1, double x2, double y2, double x, double y) {
double cos_a, sin_a, duzina_duzi, dx, dy;
double x_p, y_p;
if (x1 == x2 && y1 == y2) /* u slucaju da se temena duzi poklapaju */
return ((x - x1) * (x - x1) + (y - y1) * (y - y1));
dx = x2 - x1;
dy = y2 - y1;
duzina_duzi = sqrt(dx * dx + dy * dy);
cos_a = dx / duzina_duzi;
sin_a = dy / duzina_duzi;
x_p = (x - x1) * cos_a + (y - y1) * sin_a;
y_p = -(x - x1) * sin_a + (y - y1) * cos_a;
/* nije naspram duzi, vec sa leve strane */
/* racuna se rastojanje od desnog temena */
if (x_p < 0)
return sqrt(x_p * x_p + y_p * y_p);
/* nije naspram duzi, vec sa desne strane */
/* racuna se rastojanje od desnog temena */
else if (x_p > duzina_duzi)
return sqrt((x_p - duzina_duzi) * (x_p - duzina_duzi) + y_p * y_p);
/* tacka naspram duzi, pa je rastojanje jednako */
/* apsolutnoj vrednosti y_p */
else
return fabs(y_p);
}