§ Основа алгоритма

Суть этого алгоритма крайне проста. С помощью специальной функции псевдогенератора случайных чисел генерируется сетка из значений. Для каждого значения извлекается методом линейной или квадратной (или кубической) интерполяции значение и складывается с несколькими такими октавами разной частоты.
Алгоритм очень прост.

§ Программа на 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