Кривые Серпинского
Аналогично, путем наложения друг на друга нескольких кривых, получается рисунок из кривых Серпинского. Первые две из них С1 и С2 показаны на рис. 3.4.
C1 | C2 |
Рис. 3.4. Кривые Серпинского
Главное отличие кривой Серпинского от кривой Гильберта в том, что первая кривая замкнута. Значит, основная рекурсивная схема должна давать разомкнутую кривую, четыре части которой соединяются линиями, не принадлежащими самому рекурсивному образу. Четыре составляющих образа обозначим через A, B, C, D.
Соединительные прямые будем обозначать стрелками, указывающими соответствующее направление. Будем предполагать, что направление задается целым параметром i как i·45 градусов. Кроме направлений, описанных в предыдущем примере, понадобятся ещё:
Основной образ кривых Серпинского задается схемой:
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. Ее задача - установить начальные значения для координат рисунка и задать единичную длину линий.