§ Основа алгоритма
Суть этого алгоритма крайне проста. С помощью специальной функции псевдогенератора случайных чисел генерируется сетка из значений. Для каждого значения извлекается методом линейной или квадратной (или кубической) интерполяции значение и складывается с несколькими такими октавами разной частоты.
Алгоритм
очень прост.
§ Программа на Quick Basic
SCREEN 13
COLOR 63
FOR i = 0 TO 63: OUT 968, i: OUT 969, i: OUT 969, i: OUT 969, i: NEXT
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
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
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
FUNCTION rand (
x AS SINGLE,
y AS SINGLE)
m =
SIN(
x *
12.9898 +
y *
78.233) *
43758.54531229992#
rand =
m -
INT(
m)
END FUNCTION