Пентакл

pentacl.jpg

Построить фрактал пентакл.

Программа строит пятиконечную звезду, в которую вписана пятиконечная звезда, в которую вписана пятиконечная звезда... Входными данными является длина стороны первоначальной звезды. Далее по формулам вычисляем координаты вершин звезды. R - расстояние между вершинами звезды. Строим звезду, уменьшаем R, строим звезду с новым R, уменьшаем ...

uses graph, crt;
var gd,gm,i:integer;
    x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,l,r:integer;
procedure calculationx(r:integer); {процедура вычисления Х координат вершин звезды}
begin
  x1:=x0;
  x2:=x0+trunc(r*sin(36*pi/180));
  x3:=x0-trunc(r*cos(18*pi/180));
  x4:=x0+trunc(r*cos(18*pi/180));
  x5:=x0-trunc(r*sin(36*pi/180));
end;
procedure drow(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:integer); {процедура построения звезды}
begin
  SetColor(5);
  line(x1,y1,x2,y2);
  line(x2,y2,x3,y3);
  line(x3,y3,x4,y4);
  line(x4,y4,x5,y5);
  line(x5,y5,x1,y1);
end;
procedure stars(r:integer); var y1,y2,y3,y4,y5:integer;
begin
  calculationx(r);
  y1:=y0-r; {вычисления Y координат вершин звезды}
  y2:=y0+trunc(r*cos(36*pi/180));
  y3:=y0-trunc(r*sin(18*pi/180));
  y4:=y0-trunc(r*sin(18*pi/180));
  y5:=y0+trunc(r*cos(36*pi/180));
  drow(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5); {строим звезду по найденым координатам}
  r:=trunc(r*sin(18*pi/180)/sin(126*pi/180)); {вычисляем расстояние между вершин для звезды, которая будет вписана в предыдущую} 
  calculationx(r); {рассчитываем X координаты звезды, которая будет вписана в предыдущую}
  y1:=y0+r; {рассчитываем Y координаты звезды, которая будет вписана в предыдущую}
  y2:=y0-trunc(r*cos(36*pi/180));
  y3:=y0+trunc(r*sin(18*pi/180));
  y4:=y0+trunc(r*sin(18*pi/180));
  y5:=y0-trunc(r*cos(36*pi/180));
  drow(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5); {строим звезду по найденым координатам}
  if (r>0) then stars(trunc(r*sin(18*pi/180)/sin(126*pi/180))); {если расстояние между вершинами следующей звезды меньше нуля, то нет смысла ее строить. иначе повторяем процедуру}
end;
begin
  read(l);   {вводим длину стороны начальной звезды,в которую будут вписаны остальные}
  gd:=detect; {инициализация графики}
  initgraph(gd,gm,'');
  x0:=getmaxx div 2;
  y0:=getmaxy div 2;
  r:=trunc(l/cos(18*pi/180)/2); {расстояние между вершинами звезды}
  stars(r);
  readkey;
end.

Ключевые слова: 
Пентакл фрактал звезда
ВложениеРазмер
pentacl.rar19.53 кб