Нарисовать папоротник с помощью рекурсии - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Нарисовать папоротник с помощью рекурсии

Решение задачи: «Нарисовать папоротник с помощью рекурсии»

textual
Листинг программы
///Модуль для рисования фракталов семейства "Лист папоротника"
unit Paporotnik;
 
uses GraphABC;
 
type
 
  ///Настройки фрактала
  PaporotnikFractalInitalData = record
    data: array of array of real; 
    P0,P1,P2,P3:real;
  end;
  
  ///Фрактал "Лист папоротника"  
  PaporotnikFractal = class
  private
    data: array of array of real; 
    P0,P1,P2,P3:real;
  public
    constructor(initdata: PaporotnikFractalInitalData);
    begin
      data := initdata.data;
      P0 := initdata.P0;
      P1 := initdata.P1;
      P2 := initdata.P2;
      P3 := initdata.P3;
    end;
    procedure Draw(x0,y0,Iterations,Height,Brightness: integer; fast: boolean);
    begin
      var plotx, ploty, x, y : real;
      var Size := Height/11;
      var Width := Height div 2;
      var dx := Width div 2;
        var dc := Iterations div Brightness;
      if fast then
        LockDrawing;
      for var i:=1 to Iterations do begin
        var P := Random(100);    
        var rnd := P<P0 ? 0 : P<P1+P0 ? 1 : P<P2+P1+P0 ? 2 : 3;
        plotx := data[rnd,0]*x + data[rnd,1]*y;
        ploty := data[rnd,2]*x + data[rnd,3]*y + data[rnd,5];
        x := plotx;
        y := ploty;
        SetPixel(x0+Round(x*Size) + dx, y0+Height - Round(y*Size), GreenColor(byte(30 + (i div dc))));
      end;
      if fast then
        UnlockDrawing;      
    end;
  end;
 
end.

Объяснение кода листинга программы

  1. В модуле Paporotnik используется тип PaporotnikFractalInitalData, который представляет начальные данные для фрактала Лист папоротника. Он содержит массив data, а также значения P0, P1, P2 и P3.
  2. Фрактал Лист папоротника представлен типом PaporotnikFractal. У этого типа есть приватные переменные data, P0, P1, P2 и P3, которые представляют собой начальные данные для фрактала.
  3. Конструктор класса PaporotnikFractal принимает объект PaporotnikFractalInitalData в качестве параметра и устанавливает соответствующие значения приватных переменных.
  4. Метод Draw класса PaporotnikFractal выполняет отрисовку фрактала на графике. Он использует цикл for, чтобы вычислить координаты каждой точки на фрактале на основе начальных данных. Затем он использует функцию SetPixel, чтобы установить цвет точки на графике.
  5. Если параметр fast установлен в значение true, то метод Draw будет использовать оптимизированный алгоритм отрисовки, который работает быстрее, но может быть менее точным.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5