var get_line_segment_point_dist(VECTOR* vec1, VECTOR* vec2, VECTOR* point, VECTOR* vresult, var* fac)
{
var dist;
double loci;
double dot1,dot2;
VECTOR dir1,dir2;
vec_diff(dir1,vec2,vec1);
if(vec_length(dir1) < 1)
{
if(vresult) vec_set(vresult,dir1);
if(fac) *fac = 0.5;
dist = (vec_dist(dir1,point));
return dist;
}
vec_diff(dir2,point,vec1);
dot1 = dir1.x*(double)dir1.x+(double)(dir1.y*(double)dir1.y)+(double)(dir1.z*(double)dir1.z);
if(dot1 > -0.001 && dot1 < 0.001) return -1;
dot2 = dir2.x*(double)dir1.x+(double)(dir2.y*(double)dir1.y)+(double)(dir2.z*(double)dir1.z);
loci = dot2/dot1;
if(loci < 0) loci = 0;
if(loci > 1) loci = 1;
vec_scale(dir1,loci);
vec_add(dir1,vec1);
dist = vec_dist(dir1,point);
if(vresult) vec_set(vresult,dir1);
if(fac) *fac = loci;
return dist;
}