Нарисовать фрактал "драконова ломаная". Драконова ломаная относится к классу самоподобных рекурсивно порождаемых геометрических структур. Ломаная нулевого порядка представляет собой просто прямой угол. Изображение фигуры каждого следующего порядка строится путем рекурсивных замен каждого из отрезков фигуры младшего порядка на два отрезка, сложенных также в виде прямого угла.При этом каждый первый угол оказывается "вывернутым" наружу, а каждый второй - вовнутрь. Uses graph,crt; Const len=10;{Длина отрезков ломаной} a=len div 3;{Длина катета "закругления"} path=''; var d,r,n:integer; i,angle,old_angle:word; {Функция, определяющая значение кода направления поворота в конце отрезка с номером i} function K(i:word):byte; begin if Odd(i) then K:=i mod 4 else K:=K(i div 2) end; {Процедура рисования отрезка ломаной и предшествующего ему "закругления"} Procedure Step(angle:word; var old_angle:word); begin {Рассматриваем 4 варианта направления перемещения. Вычерчиваем "закругление" и очередной отрезок } Case angle of 0: begin if old_angle=90 then LINEREL(-a,-a) else LINEREL(a,-a); LINEREL(0,-(len-2*a)) end; 180: begin if old_angle=90 then LINEREL(-a,a) else LINEREL(a,a); LINEREL(0,len-2*a) end; 90: begin if old_angle=0 then LINEREL(-a,-a) else LINEREL(-a,a); LINEREL(-(len-2*a),0) end; 270: begin if old_angle=0 then LINEREL(a,-a) else LINEREL(a,a); LINEREL(len-2*a,0) end; end;{Case angle} old_angle:=angle end; BEGIN d:=DETECT; INITGRAPH(d, r, path); MOVETO(190+a, 276); {Начальная точка ломаной} angle:=270; {Угол наклона первого отрезка} LINEREL(len-a,0); {Первый отрезок} old_angle:=270; n:=600; {Количество отрезков} for i:=1 to n-1 do begin angle:=(angle+K(i)*90) mod 360; DELAY(2000);{ Step(angle, old_angle) end; repeat until keypressed; END.
Ключевые слова:
фрактал,драконова ломаная, скругление
|
|||||||