Автор работы: Пользователь скрыл имя, 30 Апреля 2013 в 22:56, реферат
При побудові моделей, що описують навколишній світ, люди звикли використовувати такі відомі геометричні поняття, як лінія, круг, сфера, квадрат, куб та ін. Однак виявилося, що ці прості образи не завжди адекватно описують природні об’єкти. Геометрія Евкліда не здатна описати форму хмар, гір, дерев, берега моря та ін. Справа в тому, що хмари – це не зовсім сфери, гори – не зовсім конуси та ін. Світ влаштований за дещо іншими законами, в природних структурах, як правило, кількість різних масштабів нескінченна. Між тим зовсім недавно математики розробили математичні поняття, які дозволяють описати навіть такі складні природні об'єкти. Це дозволяє зробити так звана фрактальна геометрія, центральним поняттям якої є поняття “фрактал”.
3. Фрактал Мендельброта як генератор фрактальних множин Жуліа 3
4. Комп’ютерні програми фракталів Жуліа і Мандельброта 3
Висновок 3
Використана література 3
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-угольника
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.
Висновок
| Страница