Форум: "Потрепаться";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизПифагорово дерево Найти похожие ветки
← →
Yegorchic © (2005-12-11 20:33) [0]Здравствуйте! Помогите пожалуйста построить пифагорово дерево. Я пытался сделать, но не очень у меня получалось.
Вообщем, что бы построить "первую партию" веток, у меня получлся такой код:
x0:=320;
y0:=390;
Form1.Canvas.MoveTo(320, 480);
Form1.Canvas.LineTo(x0, y0);
l:=vlength(320, 480, x0, y0);
for i:=0 to 2 do
begin
x:=round(cos(45)*0.56*l);
y:=x;
x:=x0-x;
y:=y0-y;
l:=vlength(x0, y0, x, y);
Form1.Canvas.LineTo(x, y);
x0:=x;
y0:=y;
end;;
Но строятся они несовсем верно... Вообщем, подскажите, какая общая формла для построения этих веток нужна?
← →
DrPass © (2005-12-11 20:51) [1]Черт его знает... а поливаешь ты свое дерево чем?
← →
Yegorchic © (2005-12-11 21:03) [2]Да ничем пока! Оно ещё не родилось, так сказать... =(
← →
Lamer@fools.ua © (2005-12-11 21:10) [3]Алгоритм, вроде, здесь описан:
http://neerc.ifmo.ru/school/1995-1996/ru-olymp-spb-1996-region.html
← →
Yegorchic © (2005-12-11 22:28) [4]Неее... он там не описан... это я только оттуда задачи брал...
← →
Zeqfreed © (2005-12-11 23:39) [5]
procedure DrawBranch(const Canvas : TCanvas; depth, xPos, yPos, len : Integer; angle : Single);
var
x, y : Integer;
begin
if (depth <= 0) then Exit;
x := Round(-(len) * sin(angle));
y := Round(+(len) * cos(angle));
Canvas.MoveTo(xPos, yPos);
Canvas.LineTo(xPos - x, yPos - y);
DrawBranch(Canvas, depth - 1, xPos - x, yPos - y, Round(len * 0.56), angle - Pi/4);
DrawBranch(Canvas, depth - 1, xPos - x, yPos - y, Round(len * 0.56), angle + Pi/4);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawBranch(PaintBox1.Canvas, 9, PaintBox1.Width div 2, PaintBox1.Height - 8, 200, 0);
end;
Спасибо за задачу. Хоть немножко мозг поразмял. :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c