§ Основа алгоритма
Суть этого алгоритма крайне проста. С помощью специальной функции псевдогенератора случайных чисел генерируется сетка из значений. Для каждого значения извлекается методом линейной или квадратной (или кубической) интерполяции значение и складывается с несколькими такими октавами разной частоты.Алгоритм очень прост.
§ Программа на Quick Basic
SCREEN 13 COLOR 63 FOR i = 0 TO 63: OUT 968, i: OUT 969, i: OUT 969, i: OUT 969, i: NEXT ' Draw motion FOR y = 0 TO 200 FOR x = 0 TO 320 mx = x / 320 * 8 my = y / 200 * 8 r = fbm(mx, my) PSET (x, y), r * 63 NEXT NEXT ' Fractal Brownian Motion FUNCTION fbm (x, y) value = 0 amp = .5 freq = 0 FOR i = 0 TO 5 value = value + amp * noise(x, y) x = x * 2 y = y * 2 amp = amp * .5 NEXT fbm = value END FUNCTION ' Get interpolated noise FUNCTION noise (x, y) ix = INT(x): fx = x - ix iy = INT(y): fy = y - iy a = rand(ix, iy) b = rand(ix + 1, iy) c = rand(ix, iy + 1) d = rand(ix + 1, iy + 1) ux = fx ^ 2 * (3 - 2 * fx) uy = fy ^ 2 * (3 - 2 * fy) noise = a * (1 - ux) + b * ux + (c - a) * uy * (1 - ux) + (d - b) * ux * uy END FUNCTION ' Get pseudorandom value FUNCTION rand (x AS SINGLE, y AS SINGLE) m = SIN(x * 12.9898 + y * 78.233) * 43758.54531229992# rand = m - INT(m) END FUNCTION