Фрактал с окружностями

Можно получить интересные изображения поэксперементировав с параметрами и цветами

Термин: Фрактал (лат. fractus — дробленый) — термин, означающий геометрическую фигуру, обладающую свойством самоподобия, то есть составленную из нескольких частей, каждая из которых подобна всей фигуре целиком. В более широком смысле под фракталами понимают множества точек в евклидовом пространстве, имеющие дробную метрическую размерность (в смысле Минковского или Хаусдорфа), либо метрическую размерность, строго большую топологической.

Материал взят из Википедии — свободной энциклопедии:
http://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BA%D1%82%D0%B0%D0%BB

Алгоритм(рекурсивный):

1.Рисуем окружность.
2.Делим её радиус на n.
2.После этого каждая сторона квадрата делиться на 3 части.
3.Рисуем m окружностей с уменьшеным радиусом вдоль данной окружности.
4.Рисуем в центре данной окружности окружность с новым радиусом.
4.Алгоритм повторяется пока радиус окружностей не уменьшится до Min.

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls, CRT, Menus;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Draw(x, y , Size : Integer);
 
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
	gd, gm : Integer;
        r,g,b:Integer;
const
	Min = 1;                                       //Главные параметры алгоритма
	n = 2;
	m = 5;
 
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Draw(320,240,200);
end;
 
procedure TForm1.Draw(x, y , Size : Integer);
 
var
  s1, s2 : Integer;
  i : Integer;
 
begin
        inc(b); g:=g+10;inc(r);                        //Изменение цвета
        paintbox1.Canvas.Brush.Style:=bsClear;         //новых окружностей 
        paintbox1.Canvas.pen.Color:=RGBtocolor(r,g,b);
	if Size > Min then
	begin
		s1 := Size div n;                      //Уменьшение радиуса           
		s2 := Round(Size * (n-1)/n);
		for i := 1 to m do
		begin
			Draw(x - Round(s2*sin(2*pi/m*i)),
				y + Round(s2*cos(2*pi/m*i)), s1);   //Рисование окружностей
		end;
		Draw(x,y,s1);            //И окружность в центре
	end;
	paintbox1.canvas.Ellipse(x-Size, y-Size,x+Size, y+Size);
end;
 
 
 
 
 
procedure TForm1.MenuItem2Click(Sender: TObject);                               //выход
begin
  close;
end;
 
procedure TForm1.MenuItem4Click(Sender: TObject);                              //Очистка Paintbox
begin
  paintbox1.Refresh;
end;
 
initialization
  {$I unit1.lrs}
 
end.

Ключевые слова: 
фрактал, фрактальная графика, целующиеся окружности
ВложениеРазмер
eeee.rar2.03 Мб