Роль фракталов в текущем универсуме Одно из первых применений фракталов - это машинная графика. С помощью них можно создать ( охарактеризовать ) поверхности крайне непростой конфигурации, а модифицируя всего несколько коэффициентов в уравнении добиваться почти нескончаемых вариантов исходного изображения. Фрактальная геометрия незаменима при генерации искусственных облаков, горок, поверхности моря. Действительно найден способ элементарного представления непростых не евклидовых предметов, образы которых очень схожи на природные.
на www.okindiansbc.org можно скачать Athentech Perfectly Clear Не вдаваясь в математические подробности можно сказать, что фракталы это самоподобные структуры.
Т.е. взяв отдельный фрагмент изображения фрактала, можно в ней обнаружить все тоже самое, что и в основном изображении.
возможно это не совсем корректное объяснение, но это так.
Элементарный образец фрактальной структуры в природе является граница морского берега, многие естественные границы, которые становятся явно тем длиннее, чем более мелкий масштаб используется для их измерения.
границы подобного рода в математике называют множествами Жулиа ( Julia ) Julia X1
const numits: integer = 30000; a: array[1..4] of real = (0, 0.85, 0.2, -0.15); b: array[1..4] of real = (0, 0.4, -0.26, 0.28); c: array[1..4] of real = (0, -0.04, 0.23, 0.26); d: array[1..4] of real = (0.16, 0.85, 0.22, 0.24); e: array[1..4] of real = (0, 0, 0, 0); f: array[1..4] of real = (0, 1.6, 1.6, 0.44); x: real = 0; y: real = 0;
var n, k: integer; xx, yy: real; Dr, Md: Integer; XY, YX: Real; begin for n := 1 to numits do begin k := round(INT(4 * RaNDom - 0.00001)) + 1; xx := a[k] * x + b[k] * y + e[k]; yy := c[k] * x + d[k] * y + f[k]; x := xx; y := yy; if n > 10 then Canvas.Pixels[round(20 + 50 * y), round(250 - 50 * x)] := clYellow; Application.ProcessMessages; end;
for n := 1 to numits do begin k := round(INT(4 * RaNDom - 0.00001)) + 1; xx := a[k] * x + b[k] * y + e[k]; yy := c[k] * x + d[k] * y + f[k]; x := xx; y := yy; if n > 10 then Canvas.Pixels[round(20 + 50 * y), round(250 - 50 * x)] := clGreen; Application.ProcessMessages; end;
end; | |
Цветы
const numits: integer = 10000; L = 160; x0: real = 320; y0: real = 220; m = 1.3 * L;
var n, k, j, i: integer; Dr, Md: Integer; XY, YX: Real; begin // FLOWERSX MainForm.Color := clWhite; for k := 0 to 15 do begin Canvas.Pen.Color := 19 * k * 12000; Canvas.MoveTo(round(x0), round(y0)); Canvas.LineTo(round(x0 + m * COS(0.392 * k)), round(y0 - L * SIN(0.392 * k))); Canvas.Pen.Color := clRed; Canvas.MoveTo(round(x0), round(y0)); Canvas.LineTo(round(x0 + 0.1 * m * COS(0.392 * k)), round(y0 - 0.12 * L * SIN(0.392 * k))); end;
for j := 0 to 15 do begin x0 := 320 + m * COS(0.392 * j); y0 := 220 - L * SIN(0.392 * j); for k := 0 to 15 do begin Canvas.Pen.Color := 17 * k * 10000; Canvas.MoveTo(round(x0), round(y0)); Canvas.LineTo(round(x0 + 0.2 * m * COS(0.392 * k)), round(y0 - 0.3 * L * SIN(0.392 * k))); Canvas.Pen.Color := 33 * (2 * j + 1) * 10000; Canvas.MoveTo(round(x0), round(y0)); Canvas.LineTo(round(x0 + 0.6 * m * COS(0.392 * k)), round(y0 - 0.8 * L * SIN(0.392 * k))); end; end; for i := 0 to 15 do for j := 0 to 15 do begin x0 := 320 + m * COS(0.392 * i) + 0.2 * L * COS(0.392 * j + 0.4); y0 := 220 - L * SIN(0.392 * i) + 0.3 * L * SIN(0.392 * j + 0.4); for k := 0 to 15 do begin Canvas.Pen.Color := 75 * i * 2000; Canvas.MoveTo(round(x0), round(y0)); Canvas.LineTo(round(x0 + 0.05 * L * COS(0.392 * k)), round(y0 - 0.09 * L * SIN(0.392 * k)));
Canvas.Pen.Color := 17 * (2 * i + 1) * 2000; end; end; end;
| |
Галактика
function sgn(x: real): real; begin if x < 0 then sgn := -1; if x > 0 then sgn := 1; if x = 0 then sgn := 0; end; const Num = 20000; a = 15; b = -10; x: real = 1; y: real = 1; var i: integer; xx, yy: real;
begin // GALAXYX MainForm.Color := clWhite; for i := 1 to Num do begin Canvas.Pixels[round(250 + x), round(200 + y)] := 2 * 1400 * i + 1; xx := SGN(x + y) * SQRt(ABS(x * x - y * y)); yy := SGN(x - y) * SQRt(ABS(x * y)); x := xx + a; y := yy + b; end;
end;
| |
Julia Главная особенность тих фрактальных структур состоит в том,
что мы можем выбрав область на изображении множества,
«увеличить» её, получая при этом новое красивейшее изображение.
const R: INTEGER = 25; mX: INTEGER = 800; my: INTEGER = 460; numits: integer = 256; a: real = -1.7; b: real = -1.7; c: real = 1.7; d: real = 1.7; x0: real = 0.885; y0: real = 0;
var colo, p, q, n, sx, sy, i: integer; k, l, xx, yy, x, y, rx, ry, rz, bx, by, bz: real; Dr, Md: Integer; XY, YX: Extended; Xasp, Yasp: word; begin MainForm.Color := clWhite; for p := 1 to Mx do for q := 1 to My do begin k := a + (c - a) * p / Mx; L := b + (d - b) * q / My; x := k; y := L; for n := 1 to numits do begin xx := sqr(x) - sqr(y) - x0; yy := 2 * x * y - y0; x := xx; y := yy; if (sqr(x) + sqr(y)) > R then begin colo := ((2 * n + 1) * 39000); Canvas.Pixels[p, q] := colo; Break; end; { IF }
end; end; end;
|
|
const R: INTEGER = 10; mX: INTEGER = 400; my: INTEGER = 400; numits: integer = 50; a: real = -1.7; b: real = -1.7; c: real = 1.7; d: real = 1.7; x0: real = 0.885; y0: real = 0;
var colo, p, q, n: integer; k, l, xx, yy, x, y: real; Dr, Md: Integer; XY, YX: Real; Xasp, Yasp: word; begin Dr := 1; Md := 3; for p := 1 to Mx do for q := 1 to My do begin k := a + (c - a) * p / Mx; L := b + (d - b) * q / My; x := k; y := L; for n := 1 to numits do begin xx := sqr(x) - sqr(y) - x0; yy := 2 * x * y - y0; x := xx; y := yy; if (sqr(x) + sqr(y)) > R then begin colo := ((2 * n + 1) * 38000); Canvas.Pixels[p + 80, q + 10] := colo; Break; end; { IF } end; end; end;
|
|
Из этого множества, математически можно выделить ( модифицируя параметры ) самое необычное множество Мандельброта.
(Mfndelbrot)
const R: INTEGER = 256; mX: INTEGER = 450; my: INTEGER = 400; numits: integer = 25; a: real = -1.7; b: real = -1.7; c: real = 1.7; d: real = 1.7; x0: real = 0.74543; y0: real = 0.11301;
var colo, p, q, n, sx, sy, i: integer; k, l, xx, yy, x, y, rx, ry, rz, bx, by, bz: real; Dr, Md: Integer; XY, YX: Real; Xasp, Yasp: word; begin MainForm.Color := clWhite; repeat for p := 1 to Mx do for q := 1 to My do begin K := a + (c - a) * q / Mx; L := b + (d - b) * p / My; x := k; y := L; for n := 1 to numits do begin xx := sqr(x) - sqr(y) - x0; yy := 2 * x * y - y0; x := xx; y := yy; if (sqr(x) + sqr(y)) > R then begin {colo:= ((2 * n + 1) * 33);} asm mov eax,n mov ebx,2 mul ebx inc eax mov ebx,48000 mul ebx mov colo,eax end; {REM ForeColor ((2 * n% + 1) * 33)}
Canvas.Pixels[q, p] := colo; Break; // n := numits; end; { IF } end; end; x0 := x0 + 0.003; y0 := y0 + 0.002; until x0 = 9;
end;
|
|
const numits: integer = 20000; d: array[1..3] of real = (0.5, 0.5, 0.23); x: array[0..3] of integer = (0, 30, 60, 100); f: array[0..3] of real = (0, 50, 40, 10);
var n, k, s, b: integer; y, a, c, e, ff: array[1..3] of real; xx, yy, x0, y0: real; Dr, Md: Integer; XY, YX: Real; begin
MainForm.Color := clWhite; for n := 1 to 3 do begin b := x[3] - x[0]; a[n] := (x[n] - x[n - 1]) / b; e[n] := (x[3] * x[n - 1] - x[0] * x[n]) / b; c[n] := (F[n] - F[n - 1] - d[n] * (F[3] - F[0])) / b; ff[n] := (x[3] * F[n - 1] - x[0] * F[n] - d[n] * (x[3] * F[0] - x[0] * F[3])) / b; end; x0 := 0; y0 := 0; s := 0; for n := 1 to numits do begin k := round(INT(3 * RaNDom - 0.0001)) + 1; xx := a[k] * x0 + e[k]; yy := c[k] * x0 + d[k] * y0 + ff[k]; x0 := xx; y0 := yy; // LINE(round(6.2 * x0), round(400 + 2 * s - 5 * y0), round(6.2 * x0), 450); Canvas.MoveTo(round(6.2 * x0), round(400 + 2 * s - 5 * y0)); Canvas.LineTo(round(6.2 * x0), 450); end; for s := 1 to 350 do begin x0 := 0; y0 := 0; for n := 1 to 1000 do begin k := round(INT(3 * RaNDom - 0.0001)) + 1; xx := a[k] * x0 + e[k]; yy := c[k] * x0 + d[k] * y0 + ff[k]; x0 := xx; y0 := yy; Canvas.Pen.Color := round(s + 60 + 33 * RaNDom); Canvas.MoveTo(round(6.2 * x0), round(430 + s - 5 * y0)); Canvas.LineTo(round(6.2 * x0), 450); // SetColor(round(s + 60 + 33 * RaNDom)); // LINE(round(6.2 * x0), round(430 + s - 5 * y0), round(6.2 * x0), 450) end; end; end;
|
|
Своим появлением на свет и популярностью фракталы обязаны математику Бенуа Мандельброту. Заслуга Б. Мандельброта в том, что ему удалось собрать вместе, назвать и сделать всеобщим достоянием разрозненные сведения, первое появление которых относиться к началу XX века. Сначала существовавшие как плод воображения математиков, фракталы были найдены в реальных объектах окружающего мира. Очертания гор, границы материков, русла горных рек, береговая линия и многое другое - все это фракталы. Что же такое фракталы? Часто, говоря о них, имеют в виду фрактальную кривую, обладающую нецелой (дробной) размерностью (1<D<2). Таким образом, фрактальная кривая – это геометрический объект, объединяющий в себе свойства линии и плоскости, в тоже время не являющийся ни тем, ни другим. Обратимся к классическому примеру, приведенному Мандельбротом и ставшим уже классическим: рассмотрим береговую линию, которая представляет собой типичный фрактал. При попытке измерить её длину окончательный результат будет меняться в зависимости от масштаба единицы измерения. Полученная закономерность заключается в том, что измеренная длина береговой линии будет увеличиваться с уменьшением длины измерительного прибора. Зависимость увеличения измеренной длины контура от уменьшения длины измерительного прибора называется фрактальной размерностью. Береговая линия, в зависимости от её изрезанности, может иметь разное значение фрактальной размерности: при малой изрезанности размерность прилижется к 1, при большей к 2. Фрактальная кривая размерностью, близкой к 2, фактически заполняет пространство и становится полосой. Наиболее известными фрактальными объектами, появившимся задолго до самого слова "фрактал", можно назвать кривую Коха (аналог в природе - снежинка), треугольную и универсальную кривую Серипнского, фигуру Лихтенберга, появляющаяся в виде узора на пластинке диэлектрика после его пробоя.
|