Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизФракталы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c