Вниз
Скачать: CL | DM;

Фракталы   Найти похожие ветки 

 
Stef   (2004-09-12 11:49) [0]

Изучаю фракталы и ни как не могу сделать программу без рекурсии. Может кто нибудь подскажет как обойтись без рекурсии при построение фракталов например Дракон Хартера-Хейтуэя или Кривая Кох.

Вот например процедура построения Дракона
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Image1: TImage;
   SpinEdit1: TSpinEdit;
   procedure SpinEdit1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 x1,x2,y1,y2,FinalAge:integer;
 cc:Real;

implementation

{$R *.dfm}
procedure Line(x1,y1,x2,y2:real; C:TCanvas);
begin
c.Moveto(round(x1),round(y1));
c.lineto(round(x2),round(y2));
end;

Procedure DrawDragon(age:integer;x1,y1,x2,y2:real;n:real);
var
   dx,dy,AC,cx,cy:real;
begin
 inc(age);
 if Age=FinalAge then
    line(x1,y1,x2,y2, form1.image1.canvas)
 else
   begin
     cx:=(x2+x1)/2;
     cy:=(y2+y1)/2;
     AC:=sqrt(sqr(cx-x1)+sqr(cy-y1));
     dx:=cx + AC * (cos(n+pi/2));
     dy:=cy + AC * (sin(n+pi/2));
     drawdragon(age,x1,y1,dx,dy,n+45*cc);
     drawdragon(age,x2,y2,dx,dy,n+90*cc+45*cc);
   end;
end;

procedure TForm1.SpinEdit1Click(Sender: TObject);
begin
  x1:=145;
  y1:=160;
  x2:=560;
  y2:=160;

  CC:=(pi/180);

  FinalAge:=spinedit1.Value;

  image1.Canvas.Brush.Color:=clWhite;
  image1.Canvas.rectangle(0,0,image1.Width,image1.Height);
  DrawDragon(0,x1,y1,x2,y2,0);
end;

end.

но нужно все тоже самое реализовать без рекурсии.


 
Igorek ©   (2004-09-12 14:30) [1]

Используй явный стек.


 
MBo ©   (2004-09-13 06:57) [2]

Задача принципиально рекурсивная, и без рекурсии алгоритм будет сложнее и неудобочитаем. Однако же сделать можно - во первых, видно, что финальное рисование вызывается 2^(n-1) раз - вот и нужно создать соответствующий цикл, отследив, какие параметры передаются в последней итерации.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: -0.976 c
14-1084251025
Vlad Oshin
2004-05-11 08:50
2004.10.03
с анекдот ру


3-1094625570
VadimKV
2004-09-08 10:39
2004.10.03
Как вычислить факториал (5!) на языке SQL(FB1.5)???


14-1095306740
КаПиБаРа
2004-09-16 07:52
2004.10.03
Опрос - Когда вы впервые пришли на этот форум?


14-1095137843
Мюмзик
2004-09-14 08:57
2004.10.03
что за сайт?


1-1095498796
Relaxxx
2004-09-18 13:13
2004.10.03
Какой генератор ртчетов использовать?????




   Наверх