Кривые Серпинского

Аналогично, путем наложения друг на друга нескольких кривых, получается рисунок из кривых Серпинского. Первые две из них С1 и С2 показаны ниже:

C1 C2

Главное отличие кривой Серпинского от кривой Гильберта в том, что первая кривая замкнута. Значит, основная рекурсивная схема должна давать разомкнутую кривую, четыре части которой соединяются линиями, не принадлежащими самому рекурсивному образу. Четыре составляющих образа обозначим через A, B, C, D.

Соединительные прямые будем обозначать стрелками, указывающими в соответствующем направлении. Будем предполагать, что направление задается целым параметром i как i·45 градусов. Кроме направлений, описанных в предыдущем примере, понадобятся ещT:

Основной образ кривых Серпинского задается схемой:
S: A B C D

Рекурсивные составляющие по схемам:

A: A B D A

B: B C A B

C: C D B C

D: D A C D

Заметим, что горизонтальные и вертикальные отрезки - двойной длины. Если использовать ту же процедуру рисования линии, что и в случае кривых Гильберта, то приведенные рекурсивные схемы записываются в рекурсивный алгоритм:

procedure A(i,s: integer);

BEGIN

if i>0 then

begin

A(i-1,s); Line(7,s);

B(i-1,s); Line(0,2*s);

D(i-1,s); Line(1,s);

A(i-1,s);

end;

END;

Аналогично получаются процедуры для B, C, D. Главная программа строится по образу S. Ее задача - установить начальные значения для координат рисунка и задать единичную длину линий.

Упражнения:

1. Составить рекурсивный алгоритм рисования кривых Серпинского 4-го порядка.

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

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

1-го порядка 2-го порядка

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



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