2015-10-06 15:45:26 +11:00
|
|
|
#include "./distance.hpp"
|
|
|
|
#include "../../../extent.hpp"
|
2015-11-17 16:19:27 +11:00
|
|
|
#include "../../../cast.hpp"
|
2015-10-06 15:45:26 +11:00
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
template <size_t S, size_t R>
|
2015-10-19 12:05:13 +11:00
|
|
|
static const std::array<
|
|
|
|
util::vectori<S>,
|
|
|
|
util::pow(R*2+1,S)
|
|
|
|
>
|
2015-10-06 15:45:26 +11:00
|
|
|
generate (void)
|
|
|
|
{
|
2015-10-19 12:05:13 +11:00
|
|
|
using value_type = typename util::vectori<S>::value_type;
|
|
|
|
|
2015-10-06 15:45:26 +11:00
|
|
|
static const util::extent_range<
|
|
|
|
S,typename util::vectori<S>::value_type
|
2015-10-19 12:05:13 +11:00
|
|
|
> area (util::extent<S,value_type> {R*2+1});
|
2015-10-06 15:45:26 +11:00
|
|
|
|
|
|
|
std::array<
|
|
|
|
util::vectori<S>,
|
|
|
|
util::pow(R*2+1,S)
|
|
|
|
> out;
|
|
|
|
|
|
|
|
std::transform (area.begin (), area.end (),
|
|
|
|
out.begin (),
|
2015-10-19 12:05:13 +11:00
|
|
|
[] (auto i) {
|
|
|
|
return i.template as<util::vector> () - sign_cast<value_type> (R);
|
|
|
|
});
|
2015-10-06 15:45:26 +11:00
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
template <size_t S, size_t R>
|
|
|
|
const std::array<
|
|
|
|
util::vectori<S>,
|
|
|
|
util::pow(R*2+1,S)
|
|
|
|
>
|
|
|
|
util::noise::basis::type::distance<S,R>::OFFSETS = generate<S,R> ();
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
template struct util::noise::basis::type::distance<1,1>;
|
|
|
|
template struct util::noise::basis::type::distance<2,1>;
|
|
|
|
template struct util::noise::basis::type::distance<3,1>;
|
|
|
|
|
|
|
|
template struct util::noise::basis::type::distance<1,2>;
|
|
|
|
template struct util::noise::basis::type::distance<2,2>;
|
|
|
|
template struct util::noise::basis::type::distance<3,2>;
|