Coverage report for gui


src/
File: src/utils/PerlinNoise.cpp
Date: 2024-06-25 10:57:02
Lines:
0/30
0.0%
Functions:
0/5
0.0%
Branches:
0/14
0.0%

Line Branch Exec Source
1 #include "PerlinNoise.hpp"
2
3 #include <cmath>
4 #include <algorithm>
5
6 float PerlinNoise::noise(float x, float y) {
7 int X = (int)floor(x) & 255;
8 int Y = (int)floor(y) & 255;
9 x -= floor(x);
10 y -= floor(y);
11 float u = fade(x);
12 float v = fade(y);
13 int A = _p[X] + Y;
14 int AA = _p[A];
15 int AB = _p[A + 1];
16 int B = _p[X + 1] + Y;
17 int BA = _p[B];
18 int BB = _p[B + 1];
19 return lerp(v, lerp(u, grad(_p[AA], x, y),
20 grad(_p[BA], x - 1, y)),
21 lerp(u, grad(_p[AB], x, y - 1),
22 grad(_p[BB], x - 1, y - 1)));
23 }
24
25 float PerlinNoise::fade(float t) {
26 return t * t * t * (t * (t * 6 - 15) + 10);
27 }
28
29 float PerlinNoise::lerp(float t, float a, float b) {
30 return a + t * (b - a);
31 }
32
33 float PerlinNoise::grad(int hash, float x, float y) {
34 int h = hash & 15;
35 float u = h < 8 ? x : y;
36 float v = h < 4 ? y : h == 12 || h == 14 ? x : 0;
37 return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
38 }
39
40 void PerlinNoise::initPermutationVector(unsigned int seed) {
41 _p.clear();
42 for (int i = 0; i < 256; ++i) _p.push_back(i);
43 std::shuffle(_p.begin(), _p.end(), std::default_random_engine(seed));
44 for (int i = 0; i < 256; ++i) _p.push_back(_p[i]);
45 }
46