Страница 1 из 1

Алогитм построения фракталов на Delphi

Добавлено: 13 дек 2009, 18:19
Cre)tor
Здравствуйте. Помогите, пожалуйста, реализовать алгоритм.
Задание:
Реализовать алгоритм постройки фрактальных гор. Пользователь вводит глубину рекурсии. На первом шаге имеем треугольник, изображенный в аксонометрии(пространственный вид). На первом шаге строятся медианы этого треугольника. Точки пересечения медианы со стороной смещаются в произвольном порядке вверх или вниз. Эта же процедура выполняется для каждого из четырех новосозданных треугольников и т.д.
Картинка на PaintBox :)
Почитать про фракталы можно тут

Re: Алогитм построения фракталов на Delphi

Добавлено: 17 дек 2009, 12:34
Cre)tor
Вот сам сделал :D

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    Edit1: TEdit;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Triangle(x1,y1,x2,y2,x3,y3: integer; t: integer);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Types;

{$R *.dfm}

procedure TForm1.Triangle(x1,y1,x2,y2,x3,y3: integer; t: integer);
var
  x1m,y1m,x2m,y2m,x3m,y3m: integer;

begin
  if t>0 then
  begin
    x1m:=x1+(x2-x1) div 2;
    y1m:=y1+(y2-y1) div 2 +Random(51)-100;
    x2m:=x2+(x3-x2) div 2;
    y2m:=y2+(y3-y2) div 2 +Random(51)-100;
    x3m:=x3+(x1-x3) div 2;
    y3m:=y3+(y1-y3) div 2 +Random(51)-100;
    Triangle(x1,y1,x1m,y1m,x3m,y3m,t-1);
    Triangle(x1m,y1m,x2,y2,x2m,y2m,t-1);
    Triangle(x2m,y2m,x3,y3,x3m,y3m,t-1);
    Triangle(x1m,y1m,x2m,y2m,x3m,y3m,t-1);
  end else
  begin
    PaintBox1.Canvas.MoveTo(x1,y1);
    PaintBox1.Canvas.LineTo(x2,y2);
    PaintBox1.Canvas.LineTo(x3,y3);
    PaintBox1.Canvas.LineTo(x1,y1);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x1,y1,x2,y2,x3,y3: integer;

begin
  PaintBox1.Canvas.Rectangle(-1,-1,PaintBox1.Width+1,PaintBox1.Height+1);
  x1:=PaintBox1.Width-Random(PaintBox1.Width+1);
  y1:=(PaintBox1.Height div 2)-Random((PaintBox1.Height div 2)+1);
  x2:=(PaintBox1.Width div 2)+Random((PaintBox1.Width div 2)+1);
  y2:=(PaintBox1.Height div 2)+Random((PaintBox1.Height div 2)+1);
  x3:=(PaintBox1.Width div 2)-Random((PaintBox1.Width div 2)+1);
  y3:=(PaintBox1.Height div 2)+Random((PaintBox1.Height div 2)+1);
  Triangle(x1,y1,x2,y2,x3,y3,StrToInt(Edit1.Text));
end;

end.