aabb: add contract and closest methods
This commit is contained in:
parent
a4c22059ed
commit
5b878983a6
57
aabb.cpp
57
aabb.cpp
@ -58,6 +58,63 @@ AABB<S,T>::overlaps (point<S,T> p) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <size_t S, typename T>
|
||||||
|
util::point<S,T>
|
||||||
|
AABB<S,T>::closest (point<S,T> q) const
|
||||||
|
{
|
||||||
|
point<S,T> res;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < S; ++i)
|
||||||
|
res[i] = q[i] < p0[i] ? p0[i] :
|
||||||
|
q[i] > p1[i] ? p1[i] :
|
||||||
|
q[i];
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <size_t S, typename T>
|
||||||
|
AABB<S,T>&
|
||||||
|
AABB<S,T>::contract (util::vector<S,T> mag)
|
||||||
|
{
|
||||||
|
p0 -= mag / T{2};
|
||||||
|
p1 += mag / T{2};
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <size_t S, typename T>
|
||||||
|
AABB<S,T>&
|
||||||
|
AABB<S,T>::contract (T mag)
|
||||||
|
{
|
||||||
|
return contract (util::vector<S,T> {mag});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <size_t S, typename T>
|
||||||
|
AABB<S,T>
|
||||||
|
AABB<S,T>::contracted (util::vector<S,T> mag) const
|
||||||
|
{
|
||||||
|
AABB<S,T> res = *this;
|
||||||
|
res.contract (mag);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <size_t S, typename T>
|
||||||
|
AABB<S,T>
|
||||||
|
AABB<S,T>::contracted (T mag) const
|
||||||
|
{
|
||||||
|
return contracted (vector<S,T> {mag});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
template <size_t S, typename T>
|
template <size_t S, typename T>
|
||||||
void
|
void
|
||||||
|
7
aabb.hpp
7
aabb.hpp
@ -37,6 +37,13 @@ namespace util {
|
|||||||
|
|
||||||
bool overlaps (point<S,T>) const;
|
bool overlaps (point<S,T>) const;
|
||||||
|
|
||||||
|
point<S,T> closest (point<S,T>) const;
|
||||||
|
|
||||||
|
AABB<S,T>& contract (util::vector<S,T>);
|
||||||
|
AABB<S,T>& contract (T);
|
||||||
|
AABB<S,T> contracted (util::vector<S,T>) const;
|
||||||
|
AABB<S,T> contracted (T) const;
|
||||||
|
|
||||||
void cover (point<S,T>);
|
void cover (point<S,T>);
|
||||||
|
|
||||||
AABB<S,T> operator+ (vector<S,T>) const;
|
AABB<S,T> operator+ (vector<S,T>) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user