#pragma once #include "array" #include "Common.hpp" namespace Math::Random { std::array break_float(float f); float to_float(uint8_t u); uint8_t hash(uint8_t x); float random(); template struct Noise { float at(Vector 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); } }; }