22 #ifndef EDSP_PERLIN_NOISE_GENERATOR_HPP    23 #define EDSP_PERLIN_NOISE_GENERATOR_HPP    29 namespace edsp { 
namespace random {
    31     inline namespace internal {
    33         constexpr T fade(T t) noexcept {
    34             return t * t * t * (t * (t * 6 - 15) + 10);
    38         constexpr T lerp(T t, T a, T b) noexcept {
    39             return a + t * (b - a);
    42         template <
typename Integer, 
typename T>
    43         constexpr T grad(Integer hash, T x) noexcept {
    44             return (hash & 1) == 0 ? x : -x;
    53     template <
typename T, 
typename Engine = std::mt19937>
    61             generator_(Engine(static_cast<std::size_t>(std::chrono::system_clock::now().time_since_epoch().count()))),
    62             distribution_(std::uniform_int_distribution<T>(0, 511)) {}
    69             const auto random_value = distribution_(generator_);
    70             const auto index        = 
static_cast<std::int64_t
>(random_value) & 0xFF;
    71             const auto floor_value  = random_value - 
std::floor(random_value);
    72             const auto fade_value   = fade(random_value);
    73             return lerp(fade_value, grad(permutation[index], floor_value),
    74                         grad(permutation[index + 1], floor_value - 1)) *
    80         std::uniform_int_distribution<T> distribution_;
    81         static constexpr 
const std::array<T, 512> permutation = {
    82             {151, 160, 137, 91,  90,  15,  131, 13,  201, 95,  96,  53,  194, 233, 7,   225, 140, 36,  103, 30,
    83              69,  142, 8,   99,  37,  240, 21,  10,  23,  190, 6,   148, 247, 120, 234, 75,  0,   26,  197, 62,
    84              94,  252, 219, 203, 117, 35,  11,  32,  57,  177, 33,  88,  237, 149, 56,  87,  174, 20,  125, 136,
    85              171, 168, 68,  175, 74,  165, 71,  134, 139, 48,  27,  166, 77,  146, 158, 231, 83,  111, 229, 122,
    86              60,  211, 133, 230, 220, 105, 92,  41,  55,  46,  245, 40,  244, 102, 143, 54,  65,  25,  63,  161,
    87              1,   216, 80,  73,  209, 76,  132, 187, 208, 89,  18,  169, 200, 196, 135, 130, 116, 188, 159, 86,
    88              164, 100, 109, 198, 173, 186, 3,   64,  52,  217, 226, 250, 124, 123, 5,   202, 38,  147, 118, 126,
    89              255, 82,  85,  212, 207, 206, 59,  227, 47,  16,  58,  17,  182, 189, 28,  42,  223, 183, 170, 213,
    90              119, 248, 152, 2,   44,  154, 163, 70,  221, 153, 101, 155, 167, 43,  172, 9,   129, 22,  39,  253,
    91              19,  98,  108, 110, 79,  113, 224, 232, 178, 185, 112, 104, 218, 246, 97,  228, 251, 34,  242, 193,
    92              238, 210, 144, 12,  191, 179, 162, 241, 81,  51,  145, 235, 249, 14,  239, 107, 49,  192, 214, 31,
    93              181, 199, 106, 157, 184, 84,  204, 176, 115, 121, 50,  45,  127, 4,   150, 254, 138, 236, 205, 93,
    94              222, 114, 67,  29,  24,  72,  243, 141, 128, 195, 78,  66,  215, 61,  156, 180}};
    98 #endif // EDSP_PERLIN_NOISE_GENERATOR_HPP constexpr void floor(InputIt first, InputIt last, OutputIt d_first)
For each element in the range [first, last) computes the largest integer value not greater than the e...
Definition: floor.hpp:40
 
value_type operator()()
Generates a random number following the noise distribution. 
Definition: perlin_noise_generator.hpp:68
 
This class implements a Perlin noise generator. 
Definition: perlin_noise_generator.hpp:54
 
T value_type
Definition: perlin_noise_generator.hpp:55
 
Definition: amplifier.hpp:29
 
perlin_noise_generator()
Creates a Perlin noise sequence generator. 
Definition: perlin_noise_generator.hpp:60