![]() |
Матрица статей Список статей Всячина Контакты | ||||||||||||
|
Множества Мандельброта и Жюлиа Множество Мандельброта
Рассмотрим функцию
Наиболее часто используется
program M2;
uses Graph, Crt;
type
TComplex = record
x : Real;
y : Real;
end;
const
iter = 50;
max = 16;
var
z, t, c : TComplex;
x, y, n : Integer;
Cancel : Boolean;
gd, gm : Integer;
mx, my : Integer;
begin
Cancel := False;
Randomize;
gd := Detect;
InitGraph(gd,gm,'e:\bp\bgi');
Mx := GetMaxX div 2;
My := GetMaxY div 2;
for y := -my to my do
for x := -mx to mx do
begin
n := 0;
c.x := x * 0.005;
c.y := y * 0.005;
z.x := 0;
z.y := 0;
while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do
begin
t := z;
z.x := sqr(t.x) - sqr(t.y) + c.x;
z.y := 2 * t.x * t.y+ c.y;
Inc(n);
if KeyPressed then
Cancel := true;
end;
if n < iter then
begin
PutPixel(mx + x,my + y,16 - (n mod 16));
end;
if Cancel then
exit;
end;
Readkey;
CloseGraph;
end.
Также можно изменить вид фрактала, если контроль значения
Ниже приведены изображения для
Ссылки:
Множество Жюлиа
Рассмотрим функцию
program J2;
uses Graph, Crt;
type
TComplex = record
X : Real;
Y : Real;
end;
const
iter = 50;
max = 16;
var
z, t, c : TComplex;
x, y, n : Integer;
Cancel : Boolean;
gd, gm : Integer;
mx, my : Integer;
begin
Cancel := false;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
Mx := GetMaxX div 2;
My := GetMaxY div 2;
for y := -my to my do
for x := -mx to mx do
begin
n := 0;
z.x := x * 0.005;
z.y := y * 0.005;
c.x := 0.11;
c.y := -0.66;
while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do
begin
t := z;
{z^2 + c}
z.x := sqr(t.x) - sqr(t.y) + c.x;
z.y := 2*t.x*t.y + c.y;
Inc(n);
if keypressed then
cancel := true;
end;
if n < iter then
begin
PutPixel(mx + x,my + y,16 - (n mod 16));
end;
if cancel then
exit;
end;
Readkey;
CloseGraph;
end.
При
Другие формулы:
Ссылки:
Биоморфы
program Bio;
uses graph, crt;
type
Complex = record
x: Real;
y: Real;
end;
const
iter = 50;
max = 70;
var
z, t, c: Complex;
x, y, n: Integer;
Cancel: Boolean;
gd, gm : Integer;
begin
Cancel:=false;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
for y := -getmaxy div 2 to getmaxy div 2 do
for x:=-getmaxx div 2 to getmaxx div 2 do
begin
n := 0;
z.x := x * 0.01;
z.y := y * 0.01;
c.x := 1.00003;
c.y := 1.01828;
while ((sqr(z.x) < max) and (sqr(z.y) < max)) and (n < iter) do
begin
t := z;
z.x := t.x * t.x * t.x * t.x + t.y * t.y * t.y * t.y -
6 * t.x * t.x * t.y * t.y + c.x;
z.y := 4 * t.x * t.x * t.x * t.y - 4 * t.x * t.y * t.y * t.y + c.y;
inc(n);
if keypressed then
cancel := true;
end;
if (abs(z.x) > 10) or (abs(z.y) > 1000) then
PutPixel(GetMaxM div 2 + x, GetMaxY div 2 + y, n mod 16);
if Cancel then
Exit;
end;
ReadKey;
CloseGraph;
end.
Ещё несколько формул:
Ссылки: Дерево Барнсли
Рассмотрим фрактал Жюлиа, где в качестве
/* BarnsleyJ1 */ #include
Если в качестве
program BarnsleyJ2; uses Graph, CRT; type Complex = record x: Real; y: Real; end; const Iter = 50; Max = 4; var z, t, c: Complex; x, y, n : Integer; gd, gm : Integer; mx, my : Integer; Begin gd := Detect; InitGraph(gd,gm,'c:\bp\bgi'); Randomize; mx := GetMaxX div 2; my := GetMaxY div 2; for y := -my to my do for x := -mx to mx do begin n := 0; z.x := x * 0.008; z.y := y * 0.008; c.x := 0.6; c.y := 1.1; while (sqr(z.x)+sqr(z.y) < max) and (n Ссылки: Лямбда-фрактал
Рассмотрим множество Мандельброта при #include program Lambda; uses Graph, Crt; type Complex = record X : Real; Y : Real; end; const iter = 30; max = 100; var z, c : Complex; p, q : Real; x, y, n : Integer; gd, gm : Integer; mx, my : Integer; begin Randomize; gd := Detect; InitGraph(gd,gm,'c:\bp\bgi'); Mx := GetMaxX div 2; My := GetMaxY div 2; for y := -my to my do for x := -mx to mx do begin n := 0; c.x := x * 0.01 + 1; c.y := y * 0.01; z.x := 0.5; z.y := 0; while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do begin p := z.x - sqr(z.x) + sqr(z.y); q := z.y - 2 * z.x * z.y; z.x := c.x * p - c.y * q; z.y := c.x * q + c.y * p; Inc(n); if KeyPressed then Exit; end; if n < iter then PutPixel(mx + x, my + y, 16 - (n mod 16)); end; Readkey; CloseGraph; end.
Ниже приведено множество Жюлиа для
Ссылки:
Горящий корабль
program Ship;
uses Graph, Crt;
type
Complex = Record
X : Real;
Y : Real;
end;
const
iter = 30;
max = 16;
var
z, t, c : Complex;
x, y, n : Integer;
Cancel : Boolean;
gd, gm : Integer;
mx, my : Integer;
begin
Cancel := false;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
Mx := GetMaxX div 2;
My := GetMaxY div 2;
for y := -my to my do
for x := -mx to mx do
begin
n := 0;
c.x := x * 0.005 - 0.2;
c.y := y * 0.005 - 0.3;
z.x := 0;
z.y := 0;
while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do
begin
t := z;
z.x := sqr(t.x) - sqr(t.y) + c.x;
z.y := 2 * abs(t.x * t.y) + c.y;
Inc(n);
if KeyPressed then
Cancel := true;
end;
if n < iter then
begin
PutPixel(mx + x,my + y,16 - (n mod 16));
end;
if Cancel then
Exit;
end;
Readkey;
CloseGraph;
end.
Ссылки: Паук
Рассматривается множество таких program Spider; uses Graph, CRT; type Complex = record x: Real; y: Real; end; const iter = 50; max = 16; var z, z1, c, c1: Complex; x, y, n: Integer; Cancel: Boolean; gd, gm : Integer; begin gd := Detect; InitGraph(gd,gm,'c:\bp\bgi'); Cancel := false; Randomize; for y := -GetMaxY div 2 to GetMaxY div 2 do for x := -GetMaxX div 2 to GetMaxX div 2 do begin n := 0; z.x := x * 0.01; z.y := y * 0.01; c.x := z.x; c.y := z.y; while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do begin z1 := z; c1 := c; z.x:=sqr(z1.x)-sqr(z1.y)+c.x; z.y:=2*z1.x*z1.y+c.y; c.x:=c1.x/2+z.x; c.y:=c1.y/2+z.y; inc(n); if KeyPressed then Cancel := true; end; if n < iter then PutPixel(GetMaxX div 2 + x, GetMaxY div 2 + y, n mod 16); if Cancel then Exit; end; ReadKey; CloseGraph; end. Смотрите также: |