58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <psemek/geom/interval.hpp>
|
|
#include <psemek/geom/box.hpp>
|
|
#include <psemek/geom/point.hpp>
|
|
#include <psemek/geom/simplex.hpp>
|
|
#include <psemek/geom/orientation.hpp>
|
|
|
|
namespace psemek::geom
|
|
{
|
|
|
|
template <typename T>
|
|
bool contains(interval<T> const & i, T const & x)
|
|
{
|
|
return (i.min <= x) && (x <= i.max);
|
|
}
|
|
|
|
template <typename T, std::size_t N>
|
|
bool contains(box<T, N> const & b, point<T, N> const & p)
|
|
{
|
|
for (std::size_t i = 0; i < N; ++i)
|
|
if (!contains(b[i], p[i]))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
template <typename T>
|
|
bool half_open_contains(interval<T> const & i, T const & x)
|
|
{
|
|
return (i.min <= x) && (x < i.max);
|
|
}
|
|
|
|
template <typename T, std::size_t N>
|
|
bool half_open_contains(box<T, N> const & b, point<T, N> const & p)
|
|
{
|
|
for (std::size_t i = 0; i < N; ++i)
|
|
if (!half_open_contains(b[i], p[i]))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
template <typename RobustTag, typename T>
|
|
bool contains(RobustTag robust_tag, simplex<point<T, 2>, 2> const & t, point<T, 2> const & p)
|
|
{
|
|
return true
|
|
&& orientation(robust_tag, t[0], t[1], p) != sign_t::negative
|
|
&& orientation(robust_tag, t[1], t[2], p) != sign_t::negative
|
|
&& orientation(robust_tag, t[2], t[0], p) != sign_t::negative
|
|
;
|
|
}
|
|
|
|
template <typename T>
|
|
bool contains(simplex<point<T, 2>, 2> const & t, point<T, 2> const & p)
|
|
{
|
|
return contains(default_robust_tag, t, p);
|
|
}
|
|
|
|
}
|