Фрактал вложенные квадраты

Фрактал вложенные квадраты

Демонстрация, построенная на известном фрактале "Вложенные квадраты". Эффект движения сделан за счет динамической смены цвета каждого вложенного квадрата.

Разместите на форме компонент Image1: TImage с вкладки Additional и компонент Timer1: TTimer с вкладки System. В инспекторе объектов (Object Inspector) выставьте начальные значения для компонентов.

Form1
  ClientWidth: 500
  ClientHeight: 500
 
Image1
  Align: alClient
 
Timer1
  Interval: 30

Переключитесь клавишей F12 в редактор кода и создайте в разделе Private класса Form1 процедуру Procedure RotateRect;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    Procedure RotateRect;
  public
    { Public declarations }
  end;

Нажмите CTRL+SHIFT+C, данная компбинация автоматически создаст заголовок процедуры в разделе implementation. Впишите в нее следующий код:

procedure TForm1.RotateRect;
Const N = 55;
      DT = 20;
      SD = 0;
Var Col        : TColor;
    RC, GC, BC : Integer; // Составляющие цвета
    Pnt        : Array [1..4] of TPoint;
    mx, my     : Integer;
    d          : ShortInt;
    i          : Integer;
begin
  With Image1 do begin
    Pnt[1].x := SD;
    Pnt[1].y := SD;
    Pnt[2].x := Width - SD;
    Pnt[2].y := SD;
    Pnt[3].x := Width - SD;
    Pnt[3].y := Height - SD;
    Pnt[4].x := SD;
    Pnt[4].y := Height - SD;
    GC :=0; RC := 0; BC := IC;
    d := id;
    Col := RGB( BC, GC, BC);
    Canvas.Pen.Color   := Col;
    Canvas.Brush.Color := Col;
    Canvas.Polygon( Pnt);
    For i:=1 to N do begin
      mx := Pnt[1].x;
      my := Pnt[1].y;
      Pnt[1].x := Pnt[1].x + (Pnt[2].x - Pnt[1].x) div DT;
      Pnt[1].y := Pnt[1].y + (Pnt[2].y - Pnt[1].y) div DT;
      Pnt[2].x := Pnt[2].x + (Pnt[3].x - Pnt[2].x) div DT;
      Pnt[2].y := Pnt[2].y + (Pnt[3].y - Pnt[2].y) div DT;
      Pnt[3].x := Pnt[3].x + (Pnt[4].x - Pnt[3].x) div DT;
      Pnt[3].y := Pnt[3].y + (Pnt[4].y - Pnt[3].y) div DT;
      Pnt[4].x := Pnt[4].x + (mx - Pnt[4].x) div DT;
      Pnt[4].y := Pnt[4].y + (my - Pnt[4].y) div DT;
      if BC >= 255 then d := -1;
      if BC <= 0   then d := 1;
      BC := BC + d * 5;
      Col := RGB( BC, GC, BC);
      Canvas.Pen.Color   := Col;
      Canvas.Brush.Color := Col;
      Canvas.Polygon( Pnt);
    end;
  if IC >= 255 then begin Id := 1; end;
  if IC <= 0 then begin Id := -1;  end;
  IC := IC - id * 5;
  end;
end;

Проинициализируйте в основном разделе Var две глобальные переменные

Var Form1: TForm;
    IC : Integer = 250;
    ID : ShortInt = -1;

Теперь вернитесь на форму (Клавиша F12) и сделайте двойной щелчок на компоненте Timer1 - это создаст в редакторе кода процедуру procedure TForm1.Timer1Timer(Sender: TObject); в которую необходимо вписать вызов процедуры RotateRect:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  RotateRect;
end;

Запустите программу. Run (F9).

Если Вы хотите, чтоб при перемещении окна, картинка не мерцала, задайте форме Form1 свойство DoubleBuffered := true. Сделать это лучше сразу при создании формы на событие OnCreate (вкладка Events в инспекторе объектов).

procedure TForm1.FormCreate(Sender: TObject);
begin
 DoubleBuffered := true;
end;

СКАЧАТЬ ПРОГРАММУРазмер
Move_Square.exe (351)393 кб

Отправил Пнд, 04/27/2015 - 22:12

комментариев к программе не хватает
в строке кода

Отправил Вс, 11/15/2015 - 12:10

Красивая программа. У меня на VB6 попроще.

Последние комментарии

  • cialis 10 mg 4 tablet register http://viagra-withoutdoctors.com - viagra without a doctor prescription usa cialis 10mg name viagra without a doctor prescription - cialis tadalafil cheapest online guestbook.php?sn= cheap cialis pills online
  • Красивые девушки любят позировать рядом с дорогими автомобилями http://hddevki.ru/uploads/posts/2016-05/medium/1462333024_image-712.jpg фото сильный секс на кровате, порно развлечения богатых женщин бесплатно фото http://hddevki.ru/
  • Услуги для тех, кто пропустил 6115172 купить больничный лист

Счетчики