Использование рекурсии в графике

Рекурсия часто используется в графике. Рассмотрим некоторые примеры.

Задача. Составить рекурсивный алгоритм рисования окружностей следующего вида:

Центральная окружность радиуса R, на этой окружности симметрично располагаются 4 окружности радиуса R/2 каждая. На каждой из этих 4-х окружностях аналогичным образом строятся еще 4 и т.д. Рисование прекращается, если радиус последних становится меньше некоторого числа k. Рисование окружностей будем производить относительно центральной окружности с центром (x,y). Центр первой окружности - (x+R,y), второй - (x,y+R), третьей - (x-R,y), четвертой - (x,y-R).

Решение:

uses crt,graph;

var

gd,gm,mx,my:integer;

ch:char;

procedure krug(x,y,r:integer);

begin

if r>k then

begin

krug(x+r,y,r div 2);

krug(x,y+r,r div 2);

krug(x-r,y,r div 2);

krug(x,y-r,r div 2);

end;

circle(x,y,r);

end;

Procedure Init; {инициализация графического режима}

var err: integer;

begin

DetectGraph(gd,gm);

InitGraph(gd,gm,' путь драйвера');

if GraphResult<>grok then

begin

Writeln(GraphErrorMsg(err));

Readln; Halt(1);

end;

end

BEGIN

Init;

krug(getmaxX div 2, getmaxY div 2, getmaxY div 4);

END.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: