Spaces:
Runtime error
Runtime error
| import numpy as np | |
| ########## | |
| # https://stackoverflow.com/questions/42147776/producing-2d-perlin-noise-with-numpy/42154921#42154921 | |
| def perlin(x, y, seed=0): | |
| # permutation table | |
| np.random.seed(seed) | |
| p = np.arange(256, dtype=int) | |
| np.random.shuffle(p) | |
| p = np.stack([p, p]).flatten() | |
| # coordinates of the top-left | |
| xi, yi = x.astype(int), y.astype(int) | |
| # internal coordinates | |
| xf, yf = x - xi, y - yi | |
| # fade factors | |
| u, v = fade(xf), fade(yf) | |
| # noise components | |
| n00 = gradient(p[p[xi] + yi], xf, yf) | |
| n01 = gradient(p[p[xi] + yi + 1], xf, yf - 1) | |
| n11 = gradient(p[p[xi + 1] + yi + 1], xf - 1, yf - 1) | |
| n10 = gradient(p[p[xi + 1] + yi], xf - 1, yf) | |
| # combine noises | |
| x1 = lerp(n00, n10, u) | |
| x2 = lerp(n01, n11, u) # FIX1: I was using n10 instead of n01 | |
| return lerp(x1, x2, v) # FIX2: I also had to reverse x1 and x2 here | |
| def lerp(a, b, x): | |
| "linear interpolation" | |
| return a + x * (b - a) | |
| def fade(t): | |
| "6t^5 - 15t^4 + 10t^3" | |
| return 6 * t ** 5 - 15 * t ** 4 + 10 * t ** 3 | |
| def gradient(h, x, y): | |
| "grad converts h to the right gradient vector and return the dot product with (x,y)" | |
| vectors = np.array([[0, 1], [0, -1], [1, 0], [-1, 0]]) | |
| g = vectors[h % 4] | |
| return g[:, :, 0] * x + g[:, :, 1] * y | |
| ########## |