fsb4000

Pascal

Aug 11th, 2020
2,006
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Program triafractal;
  2. {$mode objfpc} {$H+} {$J-}
  3. uses
  4. {$ifdef unix}
  5.   ptcgraph
  6.   ,ptcCrt
  7. {$endif}
  8. {$ifdef windows }
  9.   graph
  10.   ,winCrt
  11. {$endif}
  12. {$ifdef GO32V2}
  13.   graph
  14.   ,crt
  15. {$endif}
  16.   ;
  17.  
  18. Type
  19.   TTriaPoints = array[0..3] of PointType; // Координаты для рисования треугольника
  20.  
  21. // Рекурсивная процедура для рисования треугольников
  22. // внутри заданного треугольника
  23. // Параметры:
  24. //    Points - координаты внешнего треугольника
  25. //    N - уровень вложенности процедуры
  26. Procedure Triangle1(Points: TTriaPoints; N: Integer);
  27. Var
  28.   Points1: TTriaPoints;
  29. Begin
  30.   If N>0 Then
  31.   Begin
  32.     Delay(200);
  33.     SetColor(Random(14)+1); // Случайный цвет рисования. Чёрный нам, естественно, не нужен
  34.  
  35.     // Вычисление новых координат треугольника
  36.     Points1[0].X:=(Points[1].X+Points[0].X) div 2;
  37.     Points1[0].Y:=(Points[1].Y+Points[0].Y) div 2;
  38.     Points1[1].X:=(Points[2].X+Points[0].X) div 2;
  39.     Points1[1].Y:=(Points[2].Y+Points[0].Y) div 2;
  40.     Points1[2].X:=(Points[1].X+Points[2].X) div 2;
  41.     Points1[2].Y:=(Points[1].Y+Points[2].Y) div 2;
  42.     Points1[3].X:=Points1[0].X;
  43.     Points1[3].Y:=Points1[0].Y;
  44.  
  45.     DrawPoly(4, Points1);    // Рисование треугольника
  46.  
  47.     Triangle1(Points1, N-1); // Рекурсивный вызов для рисования внутри
  48.   End;
  49. End;
  50.  
  51. Var
  52.   Driver: SmallInt;  // Номер драйвера
  53.   Mode  : SmallInt;  // Номер графического режима
  54.   Points: TTriaPoints;
  55.  
  56. Begin
  57.   Randomize;
  58.   // Установка графического режима
  59.   Driver:=VGA;
  60.   Mode:=VGAHi;
  61.   InitGraph(Driver, Mode, '');
  62.   if GraphResult() <> GrOk then begin
  63.     writeln('Обнаружена ошибка!');
  64.     halt();
  65.   end;
  66.  
  67.   // Большой треугольник
  68.   Points[0].X:=0;
  69.   Points[0].Y:=400;
  70.   Points[1].X:=600;
  71.   Points[1].Y:=400;
  72.   Points[2].X:=300;
  73.   Points[2].Y:=0;
  74.   Points[3].X:=Points[0].X;
  75.   Points[3].Y:=Points[0].Y;
  76.   DrawPoly(4, Points);
  77.   Triangle1(Points, 6);
  78.  
  79.   // Верхний треугольник
  80.   Points[0].X:=150;
  81.   Points[0].Y:=200;
  82.   Points[1].X:=450;
  83.   Points[1].Y:=200;
  84.   Points[2].X:=300;
  85.   Points[2].Y:=0;
  86.   Points[3].X:=Points[0].X;
  87.   Points[3].Y:=Points[0].Y;
  88.   Triangle1(Points, 6);
  89.  
  90.   // Левый треугольник
  91.   Points[0].X:=0;
  92.   Points[0].Y:=400;
  93.   Points[1].X:=300;
  94.   Points[1].Y:=400;
  95.   Points[2].X:=150;
  96.   Points[2].Y:=200;
  97.   Points[3].X:=Points[0].X;
  98.   Points[3].Y:=Points[0].Y;
  99.   Triangle1(Points, 6);
  100.  
  101.   // Правый треугольник
  102.   Points[0].X:=300;
  103.   Points[0].Y:=400;
  104.   Points[1].X:=600;
  105.   Points[1].Y:=400;
  106.   Points[2].X:=450;
  107.   Points[2].Y:=200;
  108.   Points[3].X:=Points[0].X;
  109.   Points[3].Y:=Points[0].Y;
  110.   Triangle1(Points, 6);
  111.  
  112.   readln();
  113.   CloseGraph();
  114. End.
RAW Paste Data