![]() |
Матрица статей Список статей Всячина Контакты | ||||||||||||
|
Кривая Леви
Как строится кривая, Леви ясно из рисунка.
Кривую Леви можно построить, используя два аффинных преобразования, с помощью СИФ.
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. Кривую Леви можно построить, используя двоичную систему счисления.
Для предфрактала порядка 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. Если кривую Леви строить на сторонах квадрата, то получится т. н. остров Леви.
Смотрите также: Ссылки:
|