Нарисовать папоротник с помощью рекурсии - 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.
Объяснение кода листинга программы
- В модуле
Paporotnikиспользуется типPaporotnikFractalInitalData, который представляет начальные данные для фракталаЛист папоротника. Он содержит массивdata, а также значенияP0,P1,P2иP3. - Фрактал
Лист папоротникапредставлен типомPaporotnikFractal. У этого типа есть приватные переменныеdata,P0,P1,P2иP3, которые представляют собой начальные данные для фрактала. - Конструктор класса
PaporotnikFractalпринимает объектPaporotnikFractalInitalDataв качестве параметра и устанавливает соответствующие значения приватных переменных. - Метод
DrawклассаPaporotnikFractalвыполняет отрисовку фрактала на графике. Он использует циклfor, чтобы вычислить координаты каждой точки на фрактале на основе начальных данных. Затем он использует функциюSetPixel, чтобы установить цвет точки на графике. - Если параметр
fastустановлен в значениеtrue, то методDrawбудет использовать оптимизированный алгоритм отрисовки, который работает быстрее, но может быть менее точным.