changed Segment2DSegment2DDistance to return the 2 closest points
This commit is contained in:
parent
15cd436f90
commit
d3bb5d09e0
|
@ -40,10 +40,17 @@ namespace vcg {
|
||||||
template<class ScalarType>
|
template<class ScalarType>
|
||||||
ScalarType Segment2DSegment2DDistance(const vcg::Segment2<ScalarType> &S0,
|
ScalarType Segment2DSegment2DDistance(const vcg::Segment2<ScalarType> &S0,
|
||||||
const vcg::Segment2<ScalarType> &S1,
|
const vcg::Segment2<ScalarType> &S1,
|
||||||
vcg::Point2<ScalarType> &p_clos)
|
vcg::Point2<ScalarType> &p_clos0,
|
||||||
|
vcg::Point2<ScalarType> &p_clos1)
|
||||||
{
|
{
|
||||||
///first test if they intersect
|
//first test if they intersect
|
||||||
if (vcg:: SegmentSegmentIntersection(S0,S1,p_clos))return 0;
|
vcg::Point2<ScalarType> IntPoint;
|
||||||
|
if (vcg:: SegmentSegmentIntersection(S0,S1,IntPoint))
|
||||||
|
{
|
||||||
|
p_clos0=IntPoint;
|
||||||
|
p_clos1=IntPoint;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
vcg::Point2<ScalarType> Pclos0=ClosestPoint(S0,S1.P0());
|
vcg::Point2<ScalarType> Pclos0=ClosestPoint(S0,S1.P0());
|
||||||
vcg::Point2<ScalarType> Pclos1=ClosestPoint(S0,S1.P1());
|
vcg::Point2<ScalarType> Pclos1=ClosestPoint(S0,S1.P1());
|
||||||
vcg::Point2<ScalarType> Pclos2=ClosestPoint(S1,S0.P0());
|
vcg::Point2<ScalarType> Pclos2=ClosestPoint(S1,S0.P0());
|
||||||
|
@ -52,8 +59,32 @@ namespace vcg {
|
||||||
ScalarType d1=(Pclos1-S1.P1()).Norm();
|
ScalarType d1=(Pclos1-S1.P1()).Norm();
|
||||||
ScalarType d2=(Pclos2-S0.P0()).Norm();
|
ScalarType d2=(Pclos2-S0.P0()).Norm();
|
||||||
ScalarType d3=(Pclos3-S0.P1()).Norm();
|
ScalarType d3=(Pclos3-S0.P1()).Norm();
|
||||||
///then return the minimuim distance
|
|
||||||
return (std::min(d0,std::min(d1,std::min(d2,d3))));
|
//then return the minimuim distance
|
||||||
|
if ((d0<d1)&&(d0<d2)&&(d0<d3))
|
||||||
|
{
|
||||||
|
p_clos0=Pclos0;
|
||||||
|
p_clos1=S1.P0();
|
||||||
|
return d0;
|
||||||
|
}
|
||||||
|
if ((d1<d0)&&(d1<d2)&&(d1<d3))
|
||||||
|
{
|
||||||
|
p_clos0=Pclos1;
|
||||||
|
p_clos1=S1.P1();
|
||||||
|
return d1;
|
||||||
|
}
|
||||||
|
if ((d2<d0)&&(d2<d1)&&(d2<d3))
|
||||||
|
{
|
||||||
|
p_clos0=S0.P0();
|
||||||
|
p_clos1=Pclos2;
|
||||||
|
return d2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p_clos0=S0.P1();
|
||||||
|
p_clos1=Pclos3;
|
||||||
|
return d3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue