Фрактали Жуліа та Мендельброта

Автор работы: Пользователь скрыл имя, 30 Апреля 2013 в 22:56, реферат

Краткое описание

При побудові моделей, що описують навколишній світ, люди звикли використовувати такі відомі геометричні поняття, як лінія, круг, сфера, квадрат, куб та ін. Однак виявилося, що ці прості образи не завжди адекватно описують природні об’єкти. Геометрія Евкліда не здатна описати форму хмар, гір, дерев, берега моря та ін. Справа в тому, що хмари – це не зовсім сфери, гори – не зовсім конуси та ін. Світ влаштований за дещо іншими законами, в природних структурах, як правило, кількість різних масштабів нескінченна. Між тим зовсім недавно математики розробили математичні поняття, які дозволяють описати навіть такі складні природні об'єкти. Це дозволяє зробити так звана фрактальна геометрія, центральним поняттям якої є поняття “фрактал”.

Содержание

3. Фрактал Мендельброта як генератор фрактальних множин Жуліа 3
4. Комп’ютерні програми фракталів Жуліа і Мандельброта 3
Висновок 3
Використана література 3

Прикрепленные файлы: 1 файл

чоботан ірина2.doc

— 1.62 Мб (Скачать документ)

uses crt, graph;

var

X_max, Y_max, foregrcolor, backgrcolor, colorsum : integer;

Xcur, Ycur : integer;

 x_max1, y_max1, horfact, vertfact : real;

nmodel : integer;

xx : array[0 .. 29] of real;

yy : array[0 .. 29] of real;

n, k, i : integer;

pi, theta, r, x, y, x1, y1, xC, yC, sizefactor, xmargin, phi : real;

procedure boundaries_uc;

var w, h : word;

begin

  getaspectratio(w, h);

  y_max1 := x_max1 * Y_max * h/(X_max * w);

  horfact := X_max/x_max1;

  vertfact := Y_max/y_max1

                   end;

procedure initgr;

var grdriver, grmode : integer;

begin

  grdriver := DETECT;

  detectgraph(grdriver, grmode);

  initgraph(grdriver, grmode, '');

  if ( graphresult <> grOk ) then begin

   writeln;

   writeln('Графика не  инициализирована!');

   halt

  end;

  foregrcolor := getcolor;

  backgrcolor := getbkcolor;

  colorsum := foregrcolor + backgrcolor;

 

  X_max := getmaxx;

  Y_max := getmaxy;

  x_max1 := 10;

  boundaries_uc

end;

function IX(x : real) : integer;

begin

IX := trunc(x * horfact + 0.5)

end;

function IY(y : real) : integer;

begin

IY := Y_max - trunc(y * vertfact + 0.5)

end;

procedure move(x, y : real);

begin

  Xcur := IX(x);

  Ycur := IY(y);

  moveto(Xcur, Ycur)

end;

procedure draw(x, y : real);

var X0, Y0 : integer;

begin

  X0 := Xcur;

  Y0 := Ycur;

  Xcur := IX(x);

  Ycur := IY(y);

  line(X0, Y0, Xcur, Ycur);

  moveto(Xcur, Ycur)

end;

procedure endgr;

begin

  readkey;

  closegraph

end;

procedure side(xA, yA, xB, yB : real; n : integer);

var i : integer;

    x, y, x1, y1, dx, dy : real;

begin

  dx := xB - xA;

  dy := yB - yA;

  if ( n = 0 ) then begin

   move(xA, yA);

   draw(xB, yB)

  end

  else begin

   x1 := xA;

   y1 := yA;

   for i := 1 to nmodel do begin

    x := x1;

    y := y1;

    x1 := xA + dx * xx[i] - dy * yy[i];

    y1 := yA + dy * xx[i] + dx * yy[i];

    side(x, y, x1, y1, n - 1)

   end

  end

end;

begin

clrscr;

nmodel := 0;

 writeln('Введите 1, если в качестве базы берется горизонтальный отрезок.');

write('Для базы в виде  правильного k-угольника введите  число k (например, 4): ');

readln(k);

writeln;

write('Глубина рекурсии (например, 4): ');

readln(n);

writeln;

write('Сколько опорных точек между (0, 0) и (1, 0)? (Например, 3): ');

readln(nmodel);

nmodel := nmodel + 1;

writeln;

write('Введите пары координат  (x, y) опорных точек, исключая точки  (0, 0) и (1, 0).');

 writeln('Например,');

writeln('0.45 0');

writeln('0.5 0.45');

writeln('0.55 0');

writeln;

for i := 0 to 29 do begin

  xx[i] := 0;

  yy[i] := 0

end;

for i := 1 to nmodel - 1 do

  readln(xx[i], yy[i]);

 writeln;

write('Коэффициент размера  (1.0 - нормальный размер): ');

readln(sizefactor);

xx[nmodel] := 1.0;

initgr;

if ( k < 3 ) then begin

  xmargin := 0.5 * (x_max1 - sizefactor * (x_max1 - 1));

  side(xmargin, 0.5 * y_max1, x_max1 - xmargin, 0.5 * y_max1, n)

end

else begin

  xC := x_max1/2;

  yC := y_max1/2;

  r := 0.9 * yC * sizefactor;

  pi := 4 * arctan(1.0);

  theta := 2 * pi/k;

  phi := -0.5 * theta;

  x1 := xC + r * cos(phi);

  y1 := yC + r * sin(phi);

  for i := 0 to k - 1 do begin

   x := x1;

   y := y1;

   phi := phi + theta;

   x1 := xC + r * cos(phi);

   y1 := yC + r * sin(phi);

   side(x, y, x1, y1, n)

  end

 end;

endgr

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Висновок

| Страница



Информация о работе Фрактали Жуліа та Мендельброта