Драконова Ломаная(скругление углов)

Dragon

Нарисовать фрактал "драконова ломаная".

Драконова ломаная относится к классу самоподобных рекурсивно порождаемых геометрических структур. Ломаная нулевого порядка представляет собой просто прямой угол. Изображение фигуры каждого следующего порядка строится путем рекурсивных замен каждого из отрезков фигуры младшего порядка на два отрезка, сложенных также в виде прямого угла.При этом каждый первый угол оказывается "вывернутым" наружу, а каждый второй - вовнутрь.

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.

Ключевые слова: 
фрактал,драконова ломаная, скругление
ВложениеРазмер
programm.rar13.6 кб