Added ClosestPoint2Box2 function
This commit is contained in:
parent
4b45045c18
commit
44618a036a
|
@ -55,6 +55,7 @@ Initial commit
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <vcg/math/base.h>
|
#include <vcg/math/base.h>
|
||||||
#include <vcg/space/point2.h>
|
#include <vcg/space/point2.h>
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
/** \addtogroup space */
|
/** \addtogroup space */
|
||||||
|
@ -304,6 +305,38 @@ ScalarType DistancePoint2Box2(const Point2<ScalarType> &test,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class ScalarType>
|
||||||
|
Point2<ScalarType> ClosestPoint2Box2(const Point2<ScalarType> &test,
|
||||||
|
const Box2<ScalarType> &bbox)
|
||||||
|
{
|
||||||
|
Segment2<ScalarType> Segs[4];
|
||||||
|
Segs[0].P0()=bbox.min;
|
||||||
|
Segs[0].P1()=vcg::Point2<ScalarType>(bbox.max.X(),bbox.min.Y());
|
||||||
|
|
||||||
|
Segs[1].P0()=Segs[0].P(1);
|
||||||
|
Segs[1].P1()=bbox.max;
|
||||||
|
|
||||||
|
Segs[2].P0()=Segs[1].P(1);
|
||||||
|
Segs[2].P1()=vcg::Point2<ScalarType>(bbox.min.X(),bbox.max.Y());
|
||||||
|
|
||||||
|
Segs[3].P0()=Segs[2].P(1);
|
||||||
|
Segs[3].P1()=bbox.min;
|
||||||
|
|
||||||
|
Point2<ScalarType> closest=ClosestPoint(Segs[0],test);
|
||||||
|
ScalarType minDist=(closest-test).Norm();
|
||||||
|
for (int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
Point2<ScalarType> test=ClosestPoint(Segs[i],test);
|
||||||
|
ScalarType dist=(closest-test).Norm();
|
||||||
|
if (dist<minDist)
|
||||||
|
{
|
||||||
|
minDist=dist;
|
||||||
|
closest=test;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return closest;
|
||||||
|
}
|
||||||
|
|
||||||
/// Specificazione di box of short
|
/// Specificazione di box of short
|
||||||
typedef Box2<short> Box2s;
|
typedef Box2<short> Box2s;
|
||||||
/// Specificazione di box of int
|
/// Specificazione di box of int
|
||||||
|
|
Loading…
Reference in New Issue