Матрица статей        Список статей        Всячина        Контакты       

Кривая Леви


Кривая Леви

Как строится кривая, Леви ясно из рисунка.


Кривая Леви

Кривую Леви можно построить, используя два аффинных преобразования, с помощью СИФ.

Levy {
 0.5 -0.5  0.5 0.5 0   0   0.5
 0.5  0.5 -0.5 0.5 0.5 0.5 0.5
}

program Levy;

uses CRT, Graph;

var
	gd,gm : Integer;

procedure Draw;

const iter = 50000;

var
	t, x, y, p : Real;
	k : LongInt;
	mx, my, rad : Integer;
	
begin
	mx := 200;
	my := 300;
	rad := 250;
	Randomize;
	x := 0.0;
	y := 0.0;
	for k := 1 to iter do 
	begin
		p := Random;
		t := x;
		if p <= 1/2 then 
		begin
			x := 0.5*x - 0.5*y;
			y := 0.5*t + 0.5*y;
		end
		else
		begin
			x := 0.5*x + 0.5*y + 0.5;
			y := -0.5*t + 0.5*y + 0.5;
		end;
		PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);
	end;
end;

begin
	gd := Detect;
	InitGraph(gd,gm,'c:\bp\bgi');
	Draw;
	ReadKey;
	CloseGraph;
end.

Кривую Леви можно построить, используя двоичную систему счисления. Для предфрактала порядка мы имеем отрезков. Пронумеруем их 0 до . Направление отрезка накаждом шаге определяется следующим образом. Запишем номер отрезка в двоичной системе счисления:

Пусть
Тогда
program Levy;

uses CRT, Graph;

const
	p = 12;
  
var
	gd, gm: Integer;
	i, j: Integer;
	x, y, l: Real;
	a: Real;
	n, m, k: Integer;
	
begin
	gd := Detect;
	InitGraph(gd, gm, 'c:\bp\bgi');
	x := 300;
	y := 240;
	l := 3;
	MoveTo(Round(x), Round(y));
	for i:=0 to Round(exp(p*ln(2))) -1 do 
	begin
		a := 0;
		n := i;
		m := 0;
		k := 0;
		repeat
			m := n mod 2;
			n := n div 2;
			case m of
				0: a := a + pi/4;
				1: a := a-pi/4
			end;
			inc(k);
		until k>=p;
		x := x + l*cos(a);
		y := y + l*sin(a);
		LineTo(Round(x), Round(y));
	end;
	ReadKey;
	CloseGraph;
end.

Если кривую Леви строить на сторонах квадрата, то получится т. н. остров Леви.


Остров Леви

Смотрите также:

Ссылки:

  • Морозов А. Д. Введение в теорию фракталов. — Москва-Ижевск: Институт компьютерных исследований, 2002, 36—37.
  • Lévy C curve .
  • Lévy Fractal .
  • Lévy Tapestry .