Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: 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 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
1-1095263206
hgd
2004-09-15 19:46
2004.10.03
Скажите как сделать, чтобы....


14-1095349300
DimOn2
2004-09-16 19:41
2004.10.03
Вкладка


3-1094482333
Selena
2004-09-06 18:52
2004.10.03
DBGrid


3-1093874993
DA
2004-08-30 18:09
2004.10.03
Запрос в MSSQL


1-1095237932
Misha123
2004-09-15 12:45
2004.10.03
ООП - корректный тип для экземпляра объекта