blob: ab948719118a0e106845f60b18a72c4666d04253 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#pragma once
#include "array"
#include "Common.hpp"
namespace Math::Random {
std::array<uint8_t, 4> break_float(float f);
float to_float(uint8_t u);
uint8_t hash(uint8_t x);
float random();
template <size_t D>
struct Noise {
float at(Vector<D> pos) const {
uint8_t to_hash[D * 4];
for (int i = 0; i < D; i++) {
auto b = break_float(pos[i]);
to_hash[i*4] = b[0]; to_hash[i*4+1] = b[1]; to_hash[i*4+2] = b[2]; to_hash[i*4+3] = b[3];
}
uint8_t h = 0;
for (int i = 0; i < D * 4; i++) {
h = hash(h) + to_hash[i];
}
return to_float(h);
}
};
}
|