Среда, 24.04.2024, 11:04
Приветствую Вас, Гость | RSS
Реклама
Категории раздела
Статьи посвещенные работе с Excel с использованием Delphi 7 [2]
Работа с базами данных [2]
Прочее [1]
Разработки Воропай Андрея [3]
Публикация разработок автора: Воропай Андрей (waw) Разработка прикладного, системного ПО, БД, Delphi, SQL. Стаж работы 13 лет.
Фрактальная геометрия [3]
Фракталы (от лат. fractus - изломанный) Обладают двумя основными признаками - изломанностью и свойством самоподобия. В данной категории мы рассмотрим примеры программ на Delphi для создания фракталов.
Не программирование [0]
Реклама
личность и деятельность ивана болотникова
принципы кооперации труда
особенности стратегий для гостиницы
viagra 100mg cialis 5mg
cialis precio accutane
where to get green coffee
achater viagra en ligne
cialis canada  viagra  viagra prix  viagra   Подключил опцию Одноклассники онлайн  comprar viagra  cialis france  acheter viagra en ligne  viagra generique  prix du viagra  acheter viagra en ligne  Siamo qui per fornire tutto viagra sessualmente eccitato  prix du viagra  cialis generique  viagra pas cher  dysfonction erectile  viagra generico
Вход
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

К началу

Главная » Статьи » Фрактальная геометрия

Фракталы fractus на Delphi


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



на 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, фактически заполняет пространство и становится полосой.

Наиболее известными фрактальными объектами, появившимся задолго до самого слова "фрактал", можно назвать кривую Коха (аналог в природе - снежинка),



треугольную и универсальную кривую Серипнского, фигуру Лихтенберга, появляющаяся в виде узора на пластинке диэлектрика после его пробоя.



Категория: Фрактальная геометрия | Добавил: waw (16.02.2011) | Автор: Воропай Андрей Валериевич
Просмотров: 6451 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
g to the place, where the Comments block will be -->
Имя *:
Email:
Код *:
Информация

Смотреть фильмы в хорошем качестве эротика мультфильмы ужасы фантастика боевики комедия приключения всё это можно скачать бесплатно с помощью торрента с фильмом или мультфильмом
Банковские услуги
Запорожье