diff --git a/vcg/space/distance3.h b/vcg/space/distance3.h index b0f46fa2..0c9916cc 100644 --- a/vcg/space/distance3.h +++ b/vcg/space/distance3.h @@ -227,13 +227,23 @@ void SegmentPointSquaredDistance( Segment3<ScalarType> s, Point3< ScalarType > &closest, ScalarType &sqr_dist) { - Point3<ScalarType> e = s.P1()-s.P0(); - ScalarType t = ((p-s.P0())*e)/e.SquaredNorm(); - if(t<0) t = 0; - else if(t>1) t = 1; - closest = s.P0()+e*t; - sqr_dist = SquaredDistance(p,closest); - assert(!math::IsNAN(sqr_dist)); + Point3<ScalarType> e = s.P1()-s.P0(); + ScalarType EPS=0.00000001; + if (e.Norm()<EPS) + { + Point3<ScalarType> AvP=(s.P0()+s.P1())/2.0; + closest=AvP; + sqr_dist=(AvP-p).Norm(); + } + else + { + ScalarType t = ((p-s.P0())*e)/e.SquaredNorm(); + if(t<0) t = 0; + else if(t>1) t = 1; + closest = s.P0()+e*t; + sqr_dist = SquaredDistance(p,closest); + assert(!math::IsNAN(sqr_dist)); + } } /*